如何对多个字段的laravel中的count进行分组

时间:2017-10-03 07:34:12

标签: php mysql sql laravel eloquent

我正在使用laravel 5.4。想象一下,我想展示一些汽车广告。我将从表格中获取所有车辆记录并将其加载到我的页面中。现在我想在侧边栏中显示多个带有计数的类别(汽车类型,汽车颜色,汽车燃料),我想显示每个类别的计数。

例如:我们有10个汽车广告,其中两个是红色,三个是绿色,其中五个是白色。我希望在侧边栏中有这样的内容:

red(2)
green(3)
white(5)

我用SQL groupBy

做到了
        $colors = DB::table('advertisments')->select('color_name', DB::raw('count(color_name) as total_color'))->groupBy('color_name')->get();
        $gearboxes = DB::table('advertisments')->select('gearbox', DB::raw('count(gearbox) as total_gearbox'))->groupBy('gearbox')->get();
        $param = ['colors' => $colors,'gearboxes' => $gearboxes];
        return view('ads' , compact('ads','param'));

但是,我有几十个类别,我不能用一个groupBy这样做,所以查询的数量会太高。 有没有办法用单个查询或少查询来做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以使用数组来轻松浏览不同的列。

$params = [];
$columns = [
    'colors' => 'color_name',
    'gearboxes' => 'gearbox',
    // put your other columns in this array
];

foreach($columns as $name => $column)
    $params[$name] = DB::table('advertisments')->select($column, DB::raw('count(' . $column . ') as total'))->groupBy($column)->get();

return view('ads' , compact('ads','param'));

答案 1 :(得分:-1)

$allColors = Model::withCount(['advertisments_model', 'more_model', '...'])