2017-08-22 17 views
0

私はLaravel Eloquentを使用してネストされた結果を達成しようとしています。ルーメン/ララベルEloquent hasManyThrough入れ子にされた結果

マイロジック: 都市、近郊、ブロック

街は多くの地域

私はacomplishたい

近所の持つ多くのブロック

結果があります。

City 
Neighbourhoods 
    Blocks 

をデータは次のとおりです。

[ 
    { 

    id: 1, 
    name: "New York", 
    neighbourhoods: [ 
     { 
     id: 1, 
     name: "Neighbourhood 1", 
     city_id: 1, 
     blocks: [ 
      { 
      id: 1, 
      name: "Neighbourhood 1 Block 1", 
      neighbourhood_id: 1 
      }, 
      { 
      id: 2, 
      name: "Neighbourhood 1 Block 2", 
      neighbourhood_id: 1 
      } 
     ] 
     }, 
     { 
     id: 2, 
     name: "Neighbourhood 2", 
     city_id: 1, 
     blocks: [ 
      { 
      id: 3, 
      name: "Neighbourhood 2 Block 1", 
      neighbourhood_id: 2 
      }, 
      { 
      id: 4, 
      name: "Neighbourhood 2 Block 2", 
      neighbourhood_id: 2 
      } 
     ] 
     } 
    ] 
    } 
] 

モデル:

City.php

public function neighbourhood() 
{ 
    return $this->hasMany('App\Neighbourhood'); 
} 

public function block() 
{ 
    return $this->hasManyThrough('App\Block', 'App\Neighbourhood', 'city_id', 'neighbourhood_id', 'id'); 
} 

Neighbourhood.php

public function city() 
{ 
    return $this->belongsTo('App\City'); 
} 

public function block() 
{ 
    return $this->hasMany('App\Block'); 
} 

Block.php

public function neighbourhood() 
{ 
    return $this->belongsTo('App\Neighbourhood'); 
} 

実際の結果は私にこれを与える:

[ 
    { 
     "id": 1, 
     "name": "Ney York", 
     "neighbourhoods": [ 
      { 
       "id": 1, 
       "city_id": 1, 
       "name": "Heighbourhood 1" 
      }, 
      { 
       "id": 2, 
       "city_id": 1, 
       "name": "Heighbourhood 2" 
      }, 
      { 
       "id": 4, 
       "city_id": 1, 
       "name": "Păcurari" 
      } 
     ], 
     "blocks": [ 
      { 
       "id": 1, 
       "name": "Heighbourhood 1 Block 1", 
       "neighbourhood_id": 1, 
       "city_id": 1 
      }, 
      { 
       "id": 2, 
       "name": "Heighbourhood 1 Block 2", 
       "neighbourhood_id": 1, 
       "city_id": 1 
      } 
     ] 
    } 
] 

私は結果が入れ子に取得したいです。これを行う方法はありますか?私は何かが足りない?

もちろん、私はPHPのforeachループを使って行うことができますが、これは手動で行われます。私はこの方法でクエリから直接結果を得ることができるのだろうかと思います。

ありがとうございます。

SOLUTION:

$result = City::with('neighbourhoods.blocks')->get(); 

答えて

1

これが何をすべき:

$result = City::with('neighbourhoods.blocks')->get(); 

あなたはドット表記で、ネストされたrelationship queriesを行うことができます。

+0

ああ私の神!あなたは私をどれくらい救ったのか分かりません!本当にありがとう! –

関連する問題