Php Laravel 5.6 groupBy on collection不';行不通

Php Laravel 5.6 groupBy on collection不';行不通,php,mysql,laravel,collections,grouping,Php,Mysql,Laravel,Collections,Grouping,GroupBy只是不适用于Laravel 5.6中的收集,当简单的东西不工作时,这是非常烦人的 $users = Game::orderBy('game_count', 'desc')->get(); $users_grouped = $users->groupBy('user_id'); 正如您可能猜到的那样,$users\u group包含与$users相同的集合,具有相同的重复用户id值 我不明白为什么它不能像预期的那样工作,以及如何修复它 至少groupby可与原始数据库

GroupBy只是不适用于Laravel 5.6中的收集,当简单的东西不工作时,这是非常烦人的

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

$users_grouped = $users->groupBy('user_id');
正如您可能猜到的那样,
$users\u group
包含与
$users
相同的集合,具有相同的重复
用户id

我不明白为什么它不能像预期的那样工作,以及如何修复它


至少
groupby
可与原始数据库一起使用。。但我想使用Eloquent..

您将Eloquent的查询生成器与集合混淆了。它们不是一回事

查询生成器实例上的groupBy将使用SQL GROUP BY,并为要分组的列提供一个聚合结果

集合实例上的groupBy将返回一个新集合,该集合根据给定键的值对所有集合项进行分组

如果要使用查询生成器的groupBy方法,请将其链接到
get()

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

get()
执行查询并返回记录集合。

如果要按用户id对查询进行分组,只需在get()之前执行groupBy,如下行所示:

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

行将是相同的。您应该进行两次查询:

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

此问题的临时解决方案是原始SQL查询:

$users_grouped  = DB::select('SELECT COUNT(id) AS theCount, `user_id` from `quiz_games` GROUP BY `user_id` ORDER BY theCount DESC');

不,我想先对查询进行排序,然后将其分组。很抱歉,但是您提供的查询没有意义,您可以删除
orderBy
操作符,您将得到相同的结果。..I'am confusend不亚于雄辩:)在您的示例中,您将得到与此
$users=Game::groupBy('user_id')->get()相同的结果,所以在这种情况下,
orderBy
没有意义。@boris先生您的问题不清楚。所以你可能想写一个新的,更清楚你需要什么。groupBy您使用它的方式根本没有使用Elount,它在集合上调用groupBy,它将不是同一个集合,它将被完全不同地分组。不幸的是,
$users
$users\u grouped
在您的示例中将完全相同。