[英]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.