然后计算在laravel 5中的第二度关系

时间:2015-03-25 17:00:55

标签: php eloquent laravel-5

在提及@ JarekTkaczyk' method时,我试图统计一个国家的所有人。

  1. 城市hasMany
  2. 国家hasMany城市
  3. 在国家/地区使用hasManyThrough,如下所示:

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

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

    1. 如何让查询删除其他列?
    2. 如何通过将所有计数总结为一个值来比计算每个班级的学生更进一步?
    3. 编辑:关于第二点的更多细节:

      当我使用新建的关系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端执行。

1 个答案:

答案 0 :(得分:0)

根据@Jarek Tkaczyk的回复,我所要做的只是在groupby子句中country_id