2015-04-07 4 views
0

Я пытаюсь загрузить все магазины из базы данных с адресом магазина и сведениями о городе.Laravel Eloquent multiple joins

магазины

  • store_id
  • имя
  • описание

store_address

  • store_id
  • улица
  • почтовый
  • CITY_ID

города

  • CITY_ID
  • имя

мне удалось т o загружать все магазины с адресом, но у меня возникают проблемы с загрузкой имени города по идентификатору города.

Это то, что я в настоящее время получаю:

{ 
    "store_id":1, 
    "name":"Store Name", 
    "description":"Store description", 
    "created_at":"-0001-11-30 00:00:00", 
    "updated_at":"-0001-11-30 00:00:00", 
    "address":{ 
     "store_id":1, 
     "street":"Street name", 
     "zip":00000, 
     "city_id":1 
    } 
} 

Мой код:

$stores = Store::with('address')->get(); 

class Store extends Eloquent 
{ 

    protected $table = 'stores'; 
    protected $primaryKey = 'store_id'; 

    public function address(){ 
     return $this->hasOne('StoreAddress', 'store_id'); 
    } 
} 

class StoreAddress extends Eloquent 
{ 

    protected $table = 'store_address'; 
    protected $primaryKey = 'store_id'; 

} 

Так что я просто нужно получить название города из города таблицы, CITY_ID, я не мог найти пример это то, что я пытаюсь сделать.

Спасибо.

ответ

4

Вы должны создать belongsTo городские отношения в модели StoreAddress.

Вам нужно что-то вроде этого:

class StoreAddress extends Eloquent 
{ 

    protected $table = 'store_address'; 
    protected $primaryKey = 'store_id'; 

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

} 

Ofcourse, вам нужно создать модель для города (если вы еще не сделали этого).

+0

Спасибо, я уже делал это похоже, но мне было некогда понять, как вызвать город() в запросе, который получает магазины. – plexcell