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

时间:2016-08-02 09:31:29

标签: php laravel group-by eloquent laravel-5.2

我想使用Laravel Eloquent进行groupBy()任务。我搜索过互联网并没有找到任何有说服力的东西。 有些人使用查询生成器进行groupBy()查询,如link

但我想创建类似这种风格的查询:

Task::select('id')->groupBy('category_id')->count();

此代码仅返回第一个category_id的计数。但我想要所有的category_id

6 个答案:

答案 0 :(得分:13)

本机集合替代(按php分组,而不是mysql)。当您已经将Collection作为变量分配时,这是一个不错的选择。当然,在大多数情况下,最佳性能不及mysql分组。

$tasks->groupBy('category_id')->map->count();

答案 1 :(得分:2)

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

Task::select('id', \DB::raw("count(id)"))->groupBy('category_id')->get();

\DB::raw()函数确保在没有Laravel修改其值的情况下将字符串插入到查询中。

答案 2 :(得分:1)

更简单:

任务::选择( 'ID') - > GROUPBY( 'CATEGORY_ID')的 - >得到() - >计数();

答案 3 :(得分:1)

我覆盖了模型中的count()方法。可能是这样的:

public function count($string = '*'){
    $tempmodel = new YourModel();
    return $tempmodel ->where('id',$this->id)->where('category_id',$this->category_id)->count($string);
}

这给了我正在寻找的count()的行为。

答案 4 :(得分:0)

您可以这样做:

return DB::table('offers')->select('*', DB::raw('count('.$field.') as total_count'))->groupBy($field)->get();

答案 5 :(得分:0)

为我工作

我们需要选择一列,例如“ category_id”或“ user_id”,然后 计算get()上的选定列

    Task::select('category_id')
           ->where('user_id',Auth::user()->id)
           ->groupBy(['category_id'])
           ->get()
           ->count();