Laravel集团及由雄辩的关系计数

问题描述 投票:0回答:1

我知道这个问题之前已经在这里问: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集合为空。

是它在某种程度上可以通过组在查询的关系?

php laravel laravel-query-builder
1个回答
2
投票

有一个错误:

您正在使用$ 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也会失败,除非您禁用此配置

© www.soinside.com 2019 - 2024. All rights reserved.