在提及@ JarekTkaczyk' method时,我试图统计一个国家的所有人。
hasMany
人hasMany
城市在国家/地区使用hasManyThrough
,如下所示:
public function peopleCount(){
return $this->hasManyThrough('App\Person', 'App\City')
->selectRaw('city_id, count(*) as count')
->groupBy('city_id');
}
我可以访问每个城市的人数。然而,它返回的不仅仅是两个字段city_id
和count
!计数是正确的,但其余的数据不是我想要的。以下是一个示例:http://i.imgur.com/o1fyvEy.png
编辑:关于第二点的更多细节:
当我使用新建的关系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端执行。
答案 0 :(得分:0)
根据@Jarek Tkaczyk的回复,我所要做的只是在groupby子句中country_id