我有以下查询:
Item::select(['items.id', 'inventory.quantity'])
->leftJoin('inventory', 'items.id', '=', 'inventory.item_id')
->groupBy('items.id')
->count();
尽管返回的结果有20行,但count()
方法始终返回1。为什么会这样?
以下是来自DB::getQueryLog()
的原始查询:
select
count(*) as aggregate
from
`items`
left join
`inventory` ON `items`.`id` = `inventory`.`item_id`
group by `items`.`id`
答案 0 :(得分:1)
如果您只需要分组结果中的正确行数,并且您对性能不太关心,那么您可以先调用get()
然后再调用count()
。
$count = Item::select(['items.id', 'inventory.quantity'])
->leftJoin('inventory', 'items.id', '=', 'inventory.item_id')
->groupBy('items.id')
->get()
->count();
答案 1 :(得分:0)
是的,count
始终只返回1行。
您可能想要:
Item::select(['items.id as id', 'inventory.quantity as quantity'])
->leftJoin('inventory', 'items.id', '=', 'inventory.item_id')
->groupBy('items.id')
->lists('quantity', 'id');
这将返回一个数组,id
作为键,quantity
作为值。否则,请使用get
,但如果您想要分组结果,则不要使用count
。