计算然后求和 laravel 5 中的二阶关系
Count then Sum a second degree relation in laravel 5
在参考@JarekTkaczyk 的 method 时,我正在尝试统计一个国家/地区的所有人。
- 一个城市
hasMany
个人
- 一个国家
hasMany
个城市
在国家/地区使用 hasManyThrough
,例如:
public function peopleCount(){
return $this->hasManyThrough('App\Person', 'App\City')
->selectRaw('city_id, count(*) as count')
->groupBy('city_id');
}
我可以访问每个城市的人数。然而它 returns 不仅仅是 city_id
和 count
这两个字段!计数是正确的,但其余数据不是我想要的。这是一个例子:http://i.imgur.com/o1fyvEy.png
- 如何使查询删除其他列?
- 除了计算每个 class 中的学生人数之外,我如何通过将所有计数加总为一个值来更进一步?
编辑:关于第二点的更多细节:
当我使用新建立的关系 peopleCount
来计算一个国家/地区的所有人时,它是通过计算属于该国家/地区的城市中的所有人来实现的,从而返回与每个城市相对应的计数集合城市,示例如下:
>>> $country = App\Country::with('peopleCount')->find(1)
=> <App\Country> {
id: "1",
peopleCount: <Illuminate\Database\Eloquent\Collection> [
<App\Person> {
city_id: "1",
count: "3", //<-------
id: "1",
country_id: "1"
},
<App\Person> {
city_id: "2",
count: "5", //<-------
id: "4",
country_id: "1"
},
<App\Person> {
city_id: "3",
count: "8", //<-------
id: "9",
country_id: "1"
}
]
}
为了获得计数总和,我在 PHP 端而不是数据库端这样做:$country->peopleCount->sum('count')
所以我宁愿在查询中完成所有操作,也不愿在 php 端进行。
根据@Jarek Tkaczyk 的回复,我所要做的就是在 groupby 子句中 country_id
在参考@JarekTkaczyk 的 method 时,我正在尝试统计一个国家/地区的所有人。
- 一个城市
hasMany
个人 - 一个国家
hasMany
个城市
在国家/地区使用 hasManyThrough
,例如:
public function peopleCount(){
return $this->hasManyThrough('App\Person', 'App\City')
->selectRaw('city_id, count(*) as count')
->groupBy('city_id');
}
我可以访问每个城市的人数。然而它 returns 不仅仅是 city_id
和 count
这两个字段!计数是正确的,但其余数据不是我想要的。这是一个例子:http://i.imgur.com/o1fyvEy.png
- 如何使查询删除其他列?
- 除了计算每个 class 中的学生人数之外,我如何通过将所有计数加总为一个值来更进一步?
编辑:关于第二点的更多细节:
当我使用新建立的关系 peopleCount
来计算一个国家/地区的所有人时,它是通过计算属于该国家/地区的城市中的所有人来实现的,从而返回与每个城市相对应的计数集合城市,示例如下:
>>> $country = App\Country::with('peopleCount')->find(1)
=> <App\Country> {
id: "1",
peopleCount: <Illuminate\Database\Eloquent\Collection> [
<App\Person> {
city_id: "1",
count: "3", //<-------
id: "1",
country_id: "1"
},
<App\Person> {
city_id: "2",
count: "5", //<-------
id: "4",
country_id: "1"
},
<App\Person> {
city_id: "3",
count: "8", //<-------
id: "9",
country_id: "1"
}
]
}
为了获得计数总和,我在 PHP 端而不是数据库端这样做:$country->peopleCount->sum('count')
所以我宁愿在查询中完成所有操作,也不愿在 php 端进行。
根据@Jarek Tkaczyk 的回复,我所要做的就是在 groupby 子句中 country_id