首页 > 解决方案 > 如何在两个相关模型中使用 PHP Laravel Eloquent groupBy 和 sum 方法?

问题描述

我有三个模型CountryProvinceDistrict。与和模型Country具有一对多的关系。并且与模型具有一对多的关系。该模型具有作为外键。ProvinceDistrictProvinceDistrictDistrictprovince_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,但我想要省名。

标签: phplaravellaravel-5.2

解决方案


您是在告诉它按 Province_id: 分组$population->groupBy('province_id')。相反,您可以将一个函数传递给groupBy()collection 方法来告诉它如何对里面的项目进行分组:

https://laravel.com/docs/5.7/collections#method-groupby

尝试这样的事情:

$population = Country::where(['name' => $c_name])->first()->districts;
$num = $population->groupBy(function($district, $key) {
    return $district->province->name;
})->map(function ($row) {
    return $row->sum('population_m');
});

推荐阅读