Laravel Eloquent builder - объединение groupBy и orderBy - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть приложение 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   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 голосов
/ 03 апреля 2019

Я просто положу это здесь. Для справочных целей.

return self::select(DB::raw('item,sum(quantity_purchased) as total_quantity_purchase'))
        ->where('isRefundedCompletely',false)
        ->groupBy('item_id')
        ->orderBy('quantity_purchase','DESC')
        ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...