laravel5.6groupby-on-collection不起作用

ru9i0ody  于 2021-06-18  发布在  Mysql
关注(0)|答案(4)|浏览(520)

groupby只是在laravel5.6中不支持收集,当一些简单的本该工作的东西不工作的时候,它是非常烦人的。。。

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

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

你可能猜到了 $users_grouped 包含与相同的集合 $users 以同样的重复 user_id 价值观。
我不明白为什么它不能像预期的那样工作,以及如何修复它?
至少 GROUP BY 使用原始数据库选择。。但我想用雄辩的。。

dm7nw8vv

dm7nw8vv1#

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

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

odopli942#

行将是相同的。你应该提出两个问题:

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

vngu2lb83#

你把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()` 执行查询并返回记录集合。
bprjcwpo

bprjcwpo4#

临时解决方案是原始sql查询:

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

相关问题