laravel 访问器中的使用条件

问题描述 投票:0回答:1

为了在结果中显示 application_status,我在查询中使用 DB::raw 语句。

DB::raw('
        CASE
            WHEN status = 0 THEN "Pending"
            WHEN status = 1 THEN "Approved"
            WHEN status = 2 THEN "Declined"
        END AS application_status'
                )

如何在访问器中转换或写入它?

还有没有其他方法可以用laravel的方式写上面的内容。

$leave_applications = LeaveApplication::select('leave_type','total_days',DB::raw(
                    '
        CASE
            WHEN status = 0 THEN "Pending"
            WHEN status = 1 THEN "Approved"
            WHEN status = 2 THEN "Declined"
        END AS application_status'
                )
            ))->where('employee_id', $employee_id)->get();

这是我的完整查询。

我阅读了 laravel 文档并在上面搜索了 google,但没有找到任何东西。

我找到了使用三元运算符的解决方案。但是如果我们有超过 2 个条件怎么办?

laravel database eloquent
1个回答
0
投票

在我看来,如果您不将状态存储在数据库中,则应该将其存储在常量或配置变量中。我们希望不惜一切代价避免给定 ID 具有不同的 application_status,一致性是项目的关键。

class LeaveApplication extends Model
{

public const PENDING_STATUS_NAME = 'Pending';
public const APPROVED_STATUS_NAME = 'Approved';
public const DECLINED_STATUS_NAME = 'Declined';

protected $appends = ['application_status'];

public function getApplicationStatusAttribute()
{
    return match ($this->level) {
        0 => $this::PENDING_STATUS_NAME ,
        1 => $this::APPROVED_STATUS_NAME ,
        2 => $this::DECLINED_STATUS_NAME 
    };
}

这样您将在模型中实现所需的 application_status 。

我希望我正确理解了你的问题。

© www.soinside.com 2019 - 2024. All rights reserved.