Laravel Eloquent 使用 groupBy() 返回每个组的计数

par*_*oid 8 php group-by laravel eloquent laravel-5.2

我想groupBy()使用 Laravel Eloquent 执行任务。我在互联网上搜索过,没有找到任何雄辩的东西。有些人使用 groupBy() 查询和查询生成器这样的链接

但我想创建这样的查询:

Task::select('id')->groupBy('category_id')->count();
Run Code Online (Sandbox Code Playgroud)

此代码仅返回 first 的计数category_id。但我想计算所有category_id.

Mar*_*ski 17

Native Collection 替代方案(按 php 分组,而不是 mysql)。当您已将 Collection 作为变量分配时,这是一个不错的选择。在大多数情况下,当然不如 mysql 分组优化。

$tasks->groupBy('category_id')->map->count();
Run Code Online (Sandbox Code Playgroud)

  • 如果您询问“地图” - https://laravel.com/docs/7.x/collections#higher-order-messages (2认同)

Jer*_*dev 4

您应该将计数添加到 select 函数并使用 get 函数来执行查询。

Task::select('id', \DB::raw("count(id)"))->groupBy('category_id')->get();
Run Code Online (Sandbox Code Playgroud)

\DB::raw()函数确保将字符串插入到查询中,而 Laravel 不会修改其值。

  • 将 **\DB::raw("count(id)")** 更改为 **\DB::raw("count(id) as total_count")** 对于进一步操作会更有用。 (3认同)