我正在使用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这样做,所以查询的数量会太高。 有没有办法用单个查询或少查询来做到这一点?
答案 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', '...'])