首页 > 解决方案 > 添加选择获取值

问题描述

我想根据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");

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

标签: phplaraveleloquentlaravel-5.7

解决方案


您可以在模型中创建访问器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.
}

推荐阅读