我有一个Laravel应用程序,并且我有一个查询,该查询的功能如下。目的是通过购买的总数量获得最畅销的商品。
item item_id date quantity_purchased
rice | 14 | 2019-03-23 | 3
chicken | 6 | 2019-03-23 | 2
chicken | 6| 2019-03-20 | 3
corn | 2 | 2019-02-10 | 1
rice | 14 | 2019-03-04 | 5
rice | 14 | 2017-02-10 | 2
目标是按购买的数量获得最畅销的商品。它需要按item_id对物料进行分组,然后对该物料的购买数量求和,并按采购的总数量对分组的物料进行排序。在上面的示例中,应返回
item total_quantity_purchased
rice | 10
chicken | 5
corn | 1
我尝试使用以下雄辩的查询来实现这一目标:
return self::where('isRefundedCompletely', false)
->get()
->groupBy('item_id')->orderBy(function($item) {return $item->sum('qty_purchased');}, 'DESC');
但我收到此错误:
Illuminate\Database\Eloquent\Collection::orderBy does not exist.
您能向我解释如何通过另一种方法有效解决此问题,但又不求助于原始查询吗?
答案 0 :(得分:0)
我将其放在这里。仅供参考。
return self::select(DB::raw('item,sum(quantity_purchased) as total_quantity_purchase'))
->where('isRefundedCompletely',false)
->groupBy('item_id')
->orderBy('quantity_purchase','DESC')
->get();