Laravel 5.6 groupBy на коллекции не работает - PullRequest
0 голосов
/ 23 октября 2018

GroupBy просто не работает с коллекциями в Laravel 5.6, это очень раздражает, когда простые вещи, которые должны работать, не работают ...

$users = Game::orderBy('game_count', 'desc')->get();

$users_grouped = $users->groupBy('user_id');

Как вы можете догадаться, $users_grouped содержит то же самоеколлекция как $users с теми же повторяющимися user_id значениями.

Я не понимаю, почему это не работает, как ожидалось, и как это исправить?

Как минимум GROUP BYработает с сырой БД выберите, надеюсь .. Но я хочу использовать Eloquent ..

Ответы [ 4 ]

0 голосов
/ 24 октября 2018

Временным решением для этого является необработанный SQL-запрос:

$users_grouped  = DB::select('SELECT COUNT(id) AS theCount, `user_id` from `quiz_games` GROUP BY `user_id` ORDER BY theCount DESC');
0 голосов
/ 23 октября 2018

Если вы хотите сгруппировать запрос по user_id, просто выполните groupBy перед get (), как показано в следующей строке:

$users = Game::orderBy('game_count', 'desc')->groupBy('user_id')->get();
0 голосов
/ 23 октября 2018

Строки будут одинаковыми.Вы должны сделать два запроса:

$users = Game::orderBy('game_count', 'desc')->get();
$users_grouped = Game::orderBy('game_count', 'desc')->groupBy('user_id')->get();
0 голосов
/ 23 октября 2018

Вы путаете конструктор запросов eloquent с коллекциями.Это не одно и то же.

groupBy в экземпляре построителя запросов будет использовать SQL GROUP BY и даст один агрегированный результат для столбцов, по которым вы группируете.

groupBy вЭкземпляр коллекции возвратит новую коллекцию, которая группирует все собранные элементы по значению данного ключа.

https://laravel.com/docs/5.6/collections#method-groupby

Если вы хотите использовать метод groupBy построителя запросов, поставьте его в цепочку перед get():

$users = Game::orderBy('game_count', 'desc')->groupBy('user_id')->get();

get() выполняет запрос и возвращает коллекцию записей.

...