我知道这个问题之前已经在这里问:Laravel Grouping by Eloquent Relationship但答案是自2016年,他们似乎并没有在2019年的工作还我的问题是比较简单的,因为我只需要一个关联度。
我的问题
用户有多个项目。如何找到一个用户多少items
都有每个item_type
的一个查询?
这是我的尝试:
像查询
User::with(['items' => function($q){
$q->groupBy('type');
});
返回此错误:
语法错误或访问冲突:SELECT列表1055表达式#1是不是在GROUP BY子句中包含非聚合列“items.id”,这并不功能依赖于BY子句中的列组;这是不符合的sql_mode = only_full_group_by
我试图解决这个错误有以下查询:
User::with(['items' => function($q){
$q->select('type', \DB::raw('count(*) as total'))
->groupBy('type');
});
然而,这将返回users
的集合,每个用户的item
集合为空。
是它在某种程度上可以通过组在查询的关系?
有一个错误:
您正在使用$ Q为封闭参数,内部使用了$查询。也有时候,我不得不面对的问题,我必须通过关系查询瓶盖内的外键就可以得到结果:
<?php
$userWithItems = User::with(['items' => function($q){
$q->select('type', \DB::raw('count(*) as total'), 'user_id')
->groupBy('type');
});
通过移除USER_ID如果它工作那么最好尝试一次。其次,你不能在mysql中选择非聚合列,当你有GROUPBY。该选项是在MySQL配置禁用only_full_group_by
。所以mos晶体管逻辑可能USER_ID也会失败,除非您禁用此配置