Eloquent count()始终返回1

时间:2014-10-11 14:43:27

标签: laravel laravel-4 eloquent

我有以下查询:

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`

2 个答案:

答案 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