Laravel 雄辩计数()始终返回1

Laravel 雄辩计数()始终返回1,laravel,laravel-4,eloquent,Laravel,Laravel 4,Eloquent,我有以下疑问: Item::select(['items.id', 'inventory.quantity']) ->leftJoin('inventory', 'items.id', '=', 'inventory.item_id') ->groupBy('items.id') ->count(); count方法始终返回1,尽管返回的结果有20行。为什么会这样 以下是来自DB::getQueryLog的原始查询: 是,count始终只返回一行 您可

我有以下疑问:

Item::select(['items.id', 'inventory.quantity'])
    ->leftJoin('inventory', 'items.id', '=', 'inventory.item_id')
    ->groupBy('items.id')
    ->count();
count方法始终返回1,尽管返回的结果有20行。为什么会这样

以下是来自DB::getQueryLog的原始查询:

是,count始终只返回一行

您可能希望:

Item::select(['items.id as id', 'inventory.quantity as quantity'])
 ->leftJoin('inventory', 'items.id', '=', 'inventory.item_id')
 ->groupBy('items.id')
 ->lists('quantity', 'id');

这将返回一个数组,id为键,数量为值。否则,请使用get,但如果您想要分组结果,请不要使用count。

如果您只需要分组结果中正确的行数,并且您不太关心性能,则可以先调用get,然后再调用count

$count = Item::select(['items.id', 'inventory.quantity'])
    ->leftJoin('inventory', 'items.id', '=', 'inventory.item_id')
    ->groupBy('items.id')
    ->get()
    ->count();

Count获取查询返回的行数。如果您只有一个项目和多个库存条目,它将始终返回1,因为您是按items.id分组的。你试过使用SUM吗?我需要知道物品的行数,而不是存货的行数,这是可选的。库存表当前为空。只是为了看看联接是否把事情搞砸了,我删除了它和inventory.quantity列。当我在返回的结果中有20个项目时,仍然显示count=1,如果我只是将其更改为get。@VladCazacu我刚刚发现,如果我从查询中删除groupBy'items.id',我会得到一个准确的计数。事实上,我已经注意到,如果我在任何表的任何查询中使用groupBy,我得到的计数仅为1。您可以为计数发布生成的SQL吗?另外,您是否尝试删除select语句?@VladCazacu将其作为编辑发布。我还尝试删除选择组件,但仍然得到相同的值1。事实上,在MySQL中运行该查询会直接产生20行1。至于结果,引擎是InnoDB还是MyISAM有关系吗?我实际上需要返回用于分页的行数。我习惯于只计算返回的一行,实际计算查询将返回多少行。例如,在本例中,我希望一行有一列有20个字符。但是,在本例中,count返回一个行列表,每行中只有1。这不仅会弄乱我的查询结果,还会弄乱Bllim Datatables中的结果,因此当Datatables自动获取数据表时,分页不会在那里工作。您知道聚合如何与group by子句一起工作吗?这似乎会将组中的每条记录计数,而不是将结果集中的所有记录计数。似乎我需要删除groupBy子句并修改select以具有不同的items.id?想想看。如果是leftJoin,那么您要查找的计数实际上是从items中选择count*。您也可以使用select distinct items.idselect distinct items.id作为解决方案。谢谢
$count = Item::select(['items.id', 'inventory.quantity'])
    ->leftJoin('inventory', 'items.id', '=', 'inventory.item_id')
    ->groupBy('items.id')
    ->get()
    ->count();