Laravel雄辩的构建器-结合groupBy和orderBy

时间:2019-04-03 09:48:43

标签: laravel eloquent

我有一个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.

您能向我解释如何通过另一种方法有效解决此问题,但又不求助于原始查询吗?

1 个答案:

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