添加 Select 获得价值

Add Select Get Value

我想根据order_status_id

获取订单状态名称

我在数组中有订单状态:

$orderStatuses = [
    1 => 'Waiting',
    2 => 'Delivered',
    3 => 'Rejected'
];

我需要获取订单状态名称和order_status_id。

$orders = Order::limit(50)->get();

我现在只能通过循环遍历每个订单来获取订单状态名称,例如:

foreach($orders as $order){
    $order->order_status_name = $orderStatus[$order->order_status_id];
} 

有什么方法可以不使用foreach来获取订单状态名称吗

我尝试了什么:

Order::addSelect("$orderStatuses[".'order_status_id'."]". " as order_status_name");

我无法得到结果。有什么方法可以从 eloquent 查询中获取结果,还是我必须使用 foreach?

您可以在 Order 模型中创建访问器:

private $orderStatuses = [
    1 => 'Waiting',
    2 => 'Delivered',
    3 => 'Rejected'
];

protected $appends = ['status'];

public function getStatusAttribute()
{
    return $this->orderStatuses[$this->order_status_id];
}

然后在您的代码中使用它:

$order->status;

关于此的更多信息 here

-- 编辑

$orders = Order::limit(50)->get();

foreach($orders as $order)
{
    $order->status; // as this is computed property.
}

@nakov 如果你想使用模型,答案是正确的,但如果你想根据值获取状态,你可以在查询中使用 case

$data = Order::select("*",\DB::Raw("case when order_status_id = 1 then 'Waiting'  when order_status_id = 2 then 'Delivered' when order_status_id = 3 then 'Rejected' end as status"))
      ->limit(50)
      ->get();

它将在您的 collection

中为您提供状态字段
foreach($orders as $order){
    $order->order_status_name = $order->status;
}