如何将PHP Laravel Eloquent groupBy和sum方法与两个相关模型一起使用?

时间:2018-10-25 23:38:37

标签: php laravel laravel-5.2

我有三个模型CountryProvinceDistrictCountryProvinceDistrict模型都具有一对多的关系。并且ProvinceDistrict模型具有一对多关系。 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,但我想要它的省份名称。

2 个答案:

答案 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();