2017-08-22 29 views
0

我試圖使用Laravel雄辯實現嵌套結果。Lumen/Laravel雄辯有很多通過嵌套結果

我的邏輯: 城市,社區,塊

一個城市有很多社區

阿附近有許多塊

的結果,我想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

天啊!你不知道你救了我多少!非常非常感謝你! –