php - 如何在两个相关模型中使用 PHP Laravel Eloquent groupBy 和 sum 方法?
问题描述
我有三个模型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,但我想要省名。
解决方案
您是在告诉它按 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');
});
推荐阅读
- android - 发现多个文件的操作系统独立路径为“OSGI-INF/blueprint/blueprint.xml”
- c - 当只需要 8 个字节时将堆栈减 24?
- r - 从 rms 包 ols() 函数获取残差诊断图
- sql - 此列列表没有唯一键或主键?
- html - 如何仅在循环之间暂停悬停 CSS 动画?
- python - 条件返回值——但使用 `yield from` 而不是 `return`
- java - 单词倒数第二个字母
- html - 我的图像没有加载,无论我尝试了什么,它都不起作用,所以任何人都可以找到可能的解决方案吗?
- javascript - 以“AWS”开头的消息属性名称。或“亚马逊”。保留供亚马逊使用
- php - 如何在 PHP 中获取字符串的第一部分?