Laravel Eloquent groupBy()AND也返回每组的计数

kJa*_*esy 82 laravel eloquent laravel-4

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

这是我的两便士:

$user_info = Usermeta::groupBy('browser')->get();
Run Code Online (Sandbox Code Playgroud)

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

Ant*_*iro 168

这对我有用:

$user_info = DB::table('usermetas')
                 ->select('browser', DB::raw('count(*) as total'))
                 ->groupBy('browser')
                 ->get();
Run Code Online (Sandbox Code Playgroud)

  • 有没有什么特别的理由你更喜欢`DB :: table('usermetas') - > ..` over` Usermeta :: ..`? (6认同)

car*_*man 28

这对我有用(Laravel 5.1):

$user_info = Usermeta::groupBy('browser')->select('browser', DB::raw('count(*) as total'))->get();
Run Code Online (Sandbox Code Playgroud)


Dio*_*mes 18

谢谢Antonio,

我刚刚lists在最后添加了命令,因此它只返回一个带键和计数的数组:

Laravel 4

$user_info = DB::table('usermetas')
             ->select('browser', DB::raw('count(*) as total'))
             ->groupBy('browser')
             ->lists('total','browser');
Run Code Online (Sandbox Code Playgroud)

Laravel 5.1

$user_info = DB::table('usermetas')
             ->select('browser', DB::raw('count(*) as total'))
             ->groupBy('browser')
             ->lists('total','browser')->all();
Run Code Online (Sandbox Code Playgroud)

Laravel 5.2+

$user_info = DB::table('usermetas')
             ->select('browser', DB::raw('count(*) as total'))
             ->groupBy('browser')
             ->pluck('total','browser')->all();
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。一个注意事项: 5.1 示例中的 ->all() 应该被删除,因为您已经列出了结果。 (2认同)

Yau*_*hyk 9

也是这样工作,更整洁一点. getQuery()只返回已包含表引用的底层构建器.

$browser_total_raw = DB::raw('count(*) as total');
$user_info = Usermeta::getQuery()
                     ->select('browser', $browser_total_raw)
                     ->groupBy('browser')
                     ->pluck('total','browser');
Run Code Online (Sandbox Code Playgroud)


Ada*_*ski 9

如果要收集,请使用groupBy进行计数:

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

干杯!


小智 5

  1. 打开 config/database.php
  2. strictmysql连接设置中查找关键
  3. 将值设置为 false

  • 搞乱你未来的 SQL 代码的完美方法!并且无法在不修改的情况下在标准数据库上运行它。 (5认同)

Ala*_*ene 5

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();
Run Code Online (Sandbox Code Playgroud)