计算然后求和 laravel 5 中的二阶关系

Count then Sum a second degree relation in laravel 5

在参考@JarekTkaczyk 的 method 时,我正在尝试统计一个国家/地区的所有人。

  1. 一个城市hasMany个人
  2. 一个国家hasMany个城市

在国家/地区使用 hasManyThrough,例如:

public function peopleCount(){
    return $this->hasManyThrough('App\Person', 'App\City')
        ->selectRaw('city_id, count(*) as count')
        ->groupBy('city_id');
}

我可以访问每个城市的人数。然而它 returns 不仅仅是 city_idcount 这两个字段!计数是正确的,但其余数据不是我想要的。这是一个例子:http://i.imgur.com/o1fyvEy.png

  1. 如何使查询删除其他列?
  2. 除了计算每个 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