簡體   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