簡體   English   中英

如何在兩個相關模型中使用PHP Laravel Eloquent groupBy和sum方法?

[英]How to use PHP Laravel Eloquent groupBy and sum method with two related models?

我有CountryProvinceDistrict三個模型。 CountryProvinceDistrict模型都具有一對多關系。 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,但我想要它的省份名稱。

您正在告訴它按province_id分組: $population->groupBy('province_id') 相反,您可以將一個函數傳遞給groupBy()集合方法,以告訴它如何對內部項目進行分組:

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');
});

嘗試這個:

$population = Country::where(['name' => $c_name])->first()->districts()->with('province')->get(); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM