我在order和orderItems之间有一个简单的hasMany
关系。我正在尝试做的是获取类似订单商品的数量。这就是我所做的:
$orderItems = $order->orderItems();
$distinctItems = $orderItems->groupBy('item_name')->distinct('item_name')->get();
foreach($distinctItems as $i){
$i['count'] = $orderItems->where('item_name', '=', $i->item_name)->count();
}
$order['items'] = $distinctItems;
但是,仅为第一个订单项返回计数,为其他项返回0。我不确定为什么会这样。我还检查了where()
为除第一个项目之外的项目返回null。
感谢您的帮助。
答案 0 :(得分:2)
尝试仅使用集合,首先使用groupBy item_name,然后在每个项目上添加计数并返回新集合,这看起来像
$orderItems = $order->orderItems()->get();
$order['items'] = $orderItems->groupBy('item_name')->map(function($item) {
$i = $item->first();
$i->count = $item->count();
return $i;
});
答案 1 :(得分:0)
试试这段代码。
$cnt = array();
foreach($distinctItems as $i){
$cnt[$i]['count'] = $orderItems->where('item_name', '=', $i->item_name)->count();
}
print_r($cnt);