groupby只是在laravel5.6中不支持收集,当一些简单的本该工作的东西不工作的时候,它是非常烦人的。。。
$users = Game::orderBy('game_count', 'desc')->get();
$users_grouped = $users->groupBy('user_id');
你可能猜到了 $users_grouped
包含与相同的集合 $users
以同样的重复 user_id
价值观。
我不明白为什么它不能像预期的那样工作,以及如何修复它?
至少 GROUP BY
使用原始数据库选择。。但我想用雄辩的。。
4条答案
按热度按时间dm7nw8vv1#
如果要按用户\ id对查询进行分组,只需在get()之前执行groupby,如下所示:
odopli942#
行将是相同的。你应该提出两个问题:
vngu2lb83#
你把eloquent的查询生成器和集合搞混了。他们不是一回事。
查询生成器示例上的groupby将使用sql group by,并为要分组的列提供一个聚合结果。
集合示例上的groupby将返回一个新集合,该集合按给定键的值对所有集合项进行分组。
https://laravel.com/docs/5.6/collections#method-groupby公司
如果要使用查询生成器的groupby方法,请在
get()
:bprjcwpo4#
临时解决方案是原始sql查询: