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 ..
答案 0 :(得分:3)
您正在使雄辩的查询生成器与集合混淆。他们不是一回事。
在查询构建器实例上的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()
执行查询并返回记录的集合。
答案 1 :(得分:0)
如果要按user_id对查询进行分组,只需在get()之前进行groupBy,如下所示:
$users = Game::orderBy('game_count', 'desc')->groupBy('user_id')->get();
答案 2 :(得分:0)
行将相同。您应该进行两个查询:
--At this point of the code the data is already in the table!
Set existingNumber =
(
--Get a number from a table
)
Set existingNumber = existingNumber + 1
Alter table #myTable
Add testID bigINT Identity
DBCC CHECKIDENT (#myTable, RESEED, @existingNumber)
答案 3 :(得分:0)
临时解决方案是原始SQL查询:
$users_grouped = DB::select('SELECT COUNT(id) AS theCount, `user_id` from `quiz_games` GROUP BY `user_id` ORDER BY theCount DESC');