添加 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;
}
我想根据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;
}