Laravel雄辩,只返回foreach中第一个元素的结果?

时间:2016-12-02 05:43:15

标签: php laravel laravel-5 eloquent

我在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。

感谢您的帮助。

2 个答案:

答案 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);