我有一个表,其中包含一列浏览器版本。我只是想从记录集中知道每种类型的浏览器有多少。所以,我需要得到这样的结果:总记录:10;Internet Explorer 8:2;铬 25:4;Firefox 20:4。(全部加起来为 10)
这是我的两便士:
$user_info = Usermeta::groupBy('browser')->get();
当然,这仅包含 3 个浏览器,而不是每个浏览器的数量。我怎样才能做到这一点?
这对我有用:
$user_info = DB::table('usermetas')
->select('browser', DB::raw('count(*) as total'))
->groupBy('browser')
->get();
这对我有用(Laravel 5.1):
$user_info = Usermeta::groupBy('browser')->select('browser', DB::raw('count(*) as total'))->get();
谢谢安东尼奥,
我刚刚lists
在最后添加了命令,所以它只会返回一个带有键和计数的数组:
拉拉维尔 4
$user_info = DB::table('usermetas')
->select('browser', DB::raw('count(*) as total'))
->groupBy('browser')
->lists('total','browser');
拉拉维尔 5.1
$user_info = DB::table('usermetas')
->select('browser', DB::raw('count(*) as total'))
->groupBy('browser')
->lists('total','browser')->all();
Laravel 5.2+
$user_info = DB::table('usermetas')
->select('browser', DB::raw('count(*) as total'))
->groupBy('browser')
->pluck('total','browser');
如果要获取集合、groupBy 和计数:
$collection = ModelName::groupBy('group_id')
->selectRaw('count(*) as total, group_id')
->get();
干杯!
也可以这样工作,更整洁一些。
getQuery()
只返回已经包含表引用的基础构建器。
$browser_total_raw = DB::raw('count(*) as total');
$user_info = Usermeta::getQuery()
->select('browser', $browser_total_raw)
->groupBy('browser')
->pluck('total','browser');
config/database.php
strict
密钥mysql
false
->groupBy('state_id','locality')
->havingRaw('count > 1 ')
->having('items.name','LIKE',"%$keyword%")
->orHavingRaw('brand LIKE ?',array("%$keyword%"))
Laravel 版本 8
删除了对 DB 的依赖
$counts = Model::whereIn('agent_id', $agents)
->orderBy('total', 'asc')
->selectRaw('agent_id, count(*) as total')
->groupBy('agent_id')
->pluck('total','agent_id')->all();
$post = Post::select(DB::raw('count(*) as user_count, category_id'))
->groupBy('category_id')
->get();
这是一个按类别计算帖子计数的示例。
这是一种无需使用原始语句即可处理 group by 的更多 Laravel 方法。
$sources = $sources->where('age','>', 31)->groupBy('age');
$output = null;
foreach($sources as $key => $source) {
foreach($source as $item) {
//get each item in the group
}
$output[$key] = $source->count();
}
如果你想得到排序的数据也使用这个
$category_id = Post::orderBy('count', 'desc')
->select(DB::raw('category_id,count(*) as count'))
->groupBy('category_id')
->get();
在 Laravel 8 中,您可以使用它countBy()
来获取组的总数。
检查相同的文档。 https://laravel.com/docs/8.x/collections#method-countBy
Report::groupBy("student_id")->selectRaw("sum(total_marks) as sum,student_id")->orderByRaw("SUM(total_marks) DESC")->get();