Laravel 5.6 groupBy on collection不起作用

时间:2018-10-23 15:42:43

标签: php mysql laravel collections grouping

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 :(得分: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');
相关问题