我有三个模型Country
,Province
和District
。 Country
与Province
和District
模型都具有一对多的关系。并且Province
与District
模型具有一对多关系。 District
模型具有province_id
作为外键。
在District
模型中,我有一个总和。我想获得每个省的人口总数。
$population = Country::where(['name' => $c_name])->first()->districts;
$num = $population->groupBy('province_id')->map(function ($row) {
return $row->sum('population_m');
});
SQL查询:
SELECT provinces.name, SUM(districts.population_m) AS population_m, SUM(districts.population_f) AS population_f FROM provinces
LEFT JOIN districts ON provinces.id = districts.province_id
GROUP BY provinces.name;
上面的代码返回了省份ID,但我想要它的省份名称。
答案 0 :(得分:1)
您正在告诉它按province_id分组:slotType
。相反,您可以将函数传递给$population->groupBy('province_id')
集合方法,以告诉它如何对内部项目进行分组:
https://laravel.com/docs/5.7/collections#method-groupby
尝试这样的事情:
groupBy()
答案 1 :(得分:0)
尝试一下:
$population = Country::where(['name' => $c_name])->first()->districts()->with('province')->get();