我想使用Laravel Eloquent进行groupBy()
任务。我搜索过互联网并没有找到任何有说服力的东西。
有些人使用查询生成器进行groupBy()查询,如link
但我想创建类似这种风格的查询:
Task::select('id')->groupBy('category_id')->count();
此代码仅返回第一个category_id
的计数。但我想要所有的category_id
。
答案 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();