2016-04-05 1 views
0

У меня есть таблицы баз данных 3: страна, город и ресторанРегистрация 3 таблицы базы данных, чтобы получить результат в формате JSON Laravel

Country  {id,name} 
City  {id,name,country_id} 
Restaurant {id,name,city_id} 

, как я могу получить данные страны с его городом, и это рестораны?

Я использую этот код, чтобы получить страны с его города: к сведению, что я сделал все отношения между таблицами следующим образом:

Country {hasMany('City')} 
City {hasMany('Hotel')} 
City {belongsTo('Country')} 
Hotel {belongsTo('City')} 

$x = Country::with('city')->get(); 
return Response::json($x,200,[],JSON_PRETTY_PRINT); 

Результат:

[ 
    { 
     "id": 1, 
     "name": "Spain", 
     "city": [ 
      { 
       "id": 1, 
       "name": "Madrid", 
       "country_id": 1 
      }, 
      { 
       "id": 2, 
       "name": "Barcelona", 
       "country_id": 1 
      } 
     ] 
    }, 
    { 
     "id": 2, 
     "name": "Italy", 
     "city": [] 
    } 
] 

что мне сделать, чтобы получить рестораны в каждом городе в том же ответе JSON?

любая помощь будет оценена.

ответ

2

Вы можете использовать hasManyThrough() для доступа удаленных отношений: https://laravel.com/docs/5.1/eloquent-relationships#has-many-through

// App\Country 
public function hotels() { 
    $this->hasManyThrough('App\Hotel', 'App\City'); 
} 

, то вы можете получить его следующим образом:

$x = Country::with('city')->with('hotels')->get(); 
+0

Спасибо, это сработало. но как я могу получить все отели только в стране @ maximl337? –

+0

'$ x = Страна-> с (« город ») -> с (« отели ») -> где (« страна »,« = »,« США ») -> get(); '$ hotels = $ x-> отели; '$ hotels = $ x-> гостиницы() -> где (" city_id "," = ", 15) -> get(); –

Смежные вопросы