繁体   English   中英

Laravel按口才关系分组和计数

[英]Laravel Group & Count by Eloquent Relationship

我知道这里曾经有人问过这个问题: Laravel按口才关系分组,但答案来自2016年,看来在2019年不起作用。我的问题也更简单,因为我只需要一个关系级别。

我的问题

一个用户有多个项目 如何通过一个查询查找用户每个item_type有多少个items


这是我尝试的:

像这样的查询

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集合为空。

是否可以通过某种方式对查询中的关系进行分组?

发生错误:

您使用$ q作为闭包参数,内部使用$ query。 有时我也遇到问题,我必须在关系查询闭包中传递外键才能获得结果:

<?php 

$userWithItems = User::with(['items' => function($q){
    $q->select('type', \DB::raw('count(*) as total'), 'user_id')
          ->groupBy('type');
});

如果可行,请删除user_id尝试一次,这样会更好。 其次,当您具有groupby时,不能在mysql中选择非聚合列。 在mysql配置中,该选项是disable only_full_group_by 因此,除非禁用此配置,否则很有可能user_id也将失败

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM