156

我有一个表,其中包含一列浏览器版本。我只是想从记录集中知道每种类型的浏览器有多少。所以,我需要得到这样的结果:总记录:10;Internet Explorer 8:2;铬 25:4;Firefox 20:4。(全部加起来为 10)

这是我的两便士:

$user_info = Usermeta::groupBy('browser')->get();

当然,这仅包含 3 个浏览器,而不是每个浏览器的数量。我怎样才能做到这一点?

4

13 回答 13

304

这对我有用:

$user_info = DB::table('usermetas')
                 ->select('browser', DB::raw('count(*) as total'))
                 ->groupBy('browser')
                 ->get();
于 2013-08-30T13:11:37.157 回答
43

这对我有用(Laravel 5.1):

$user_info = Usermeta::groupBy('browser')->select('browser', DB::raw('count(*) as total'))->get();
于 2016-07-20T10:00:11.740 回答
37

谢谢安东尼奥,

我刚刚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');
于 2015-08-11T15:34:48.693 回答
26

如果要获取集合、groupBy 和计数:

$collection = ModelName::groupBy('group_id')
->selectRaw('count(*) as total, group_id')
->get();

干杯!

于 2018-08-17T08:42:39.587 回答
9

也可以这样工作,更整洁一些。 getQuery()只返回已经包含表引用的基础构建器。

$browser_total_raw = DB::raw('count(*) as total');
$user_info = Usermeta::getQuery()
    ->select('browser', $browser_total_raw)
    ->groupBy('browser')
    ->pluck('total','browser');
于 2015-11-12T16:08:58.247 回答
9
  1. 打开config/database.php
  2. 在连接设置中查找strict密钥mysql
  3. 将值设置为false
于 2018-08-27T10:58:18.427 回答
3

试试这个

->groupBy('state_id','locality')
  ->havingRaw('count > 1 ')
  ->having('items.name','LIKE',"%$keyword%")
  ->orHavingRaw('brand LIKE ?',array("%$keyword%"))
于 2017-12-07T11:11:42.240 回答
3

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();
于 2021-05-26T02:38:19.460 回答
1
$post = Post::select(DB::raw('count(*) as user_count, category_id'))
              ->groupBy('category_id')
              ->get();

这是一个按类别计算帖子计数的示例。

于 2020-06-15T14:02:31.013 回答
0

这是一种无需使用原始语句即可处理 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();
}
于 2018-03-28T22:24:58.097 回答
0

如果你想得到排序的数据也使用这个

$category_id = Post::orderBy('count', 'desc')
    ->select(DB::raw('category_id,count(*) as count'))
    ->groupBy('category_id')
    ->get();
于 2020-06-15T14:08:49.490 回答
0

在 Laravel 8 中,您可以使用它countBy()来获取组的总数。

检查相同的文档。 https://laravel.com/docs/8.x/collections#method-countBy

于 2022-02-04T12:50:59.013 回答
-1

Report::groupBy("student_id")->selectRaw("sum(total_marks) as sum,student_id")->orderByRaw("SUM(total_marks) DESC")->get();

于 2021-10-27T08:54:17.077 回答