我知道这里曾有人问过这个问题:Laravel Grouping by Eloquent Relationship,但答案来自2016年,似乎在2019年不起作用。我的问题也更简单,因为我只需要一个关系级别。 >
我的问题
A
用户有多个项目。
如何通过一个查询查找每个items
用户有多少item_type
?
这是我尝试过的:
类似的查询
User::with(['items' => function($q){
$q->groupBy('type');
});
返回此错误:
语法错误或访问冲突:1055 SELECT列表的表达式#1 不在GROUP BY子句中,并且包含未聚合的列'items.id' 在功能上不依赖于GROUP BY子句中的列; 这与sql_mode = only_full_group_by
不兼容
我尝试通过以下查询解决此错误:
User::with(['items' => function($q){
$q->select('type', \DB::raw('count(*) as total'))
->groupBy('type');
});
但是,这将返回users
的集合,其中每个用户的item
集合为空。
是否可以通过某种方式对查询中的关系进行分组?
答案 0 :(得分:2)
有错误:
您使用$ q作为闭包参数,而内部使用$ query。有时我也遇到一个问题,我必须在关系查询闭包内部传递外键才能获得结果:
/$uid/my_friend_id
通过删除user_id尝试一次(如果可行),这样更好。其次,当您具有groupby时,不能在mysql中选择非聚合列。在mysql配置中,该选项禁用<?php
$userWithItems = User::with(['items' => function($q){
$q->select('type', \DB::raw('count(*) as total'), 'user_id')
->groupBy('type');
});
。因此,除非禁用此配置,否则很有可能user_id也将失败