2013-09-23 1 views
4

У меня есть база данных со следующими таблицами и отношениями:Получение отношения отношений с помощью красноречивых в Laravel

объявлений 1-1 автомобилей m-1 Модель m-1 Марка

Если я хочу, чтобы получить рекламу, я могу просто использовать:

Advert::find(1); 

Если я хочу детали автомобиля, я мог бы использовать:

Advert::find(1)->with('Car'); 

Однако, если я хочу деталь модели (следующие отношения с автомобиля), что бы синтаксис, следующий не работает:

Advert::find(1)->with('Car')->with('Model'); 

Большое спасибо

ответ

13

Это в официальном documentation под "жадной загрузки"

Несколько отношений:

$books = Book::with('author', 'publisher')->get(); 

Вложенные отношения:

$books = Book::with('author.contacts')->get(); 

Так что для вас:

Advert::find(1)->with('Car.Model')->get(); 
+0

Ах отлично! +1 для ссылки на Eager Loading - я прошел через раздел Eloquent, но не нашел ответа на мой вопрос! –

+0

Должна ли эта работа работать с отношениями hasMany? Он работает только для моих отношений «hasOne»/«принадлежит только». –

+1

Ссылка на документацию теперь: https://laravel.com/docs/5.5/eloquent-relationships#eager-loading в разделе «Вложенная нетерпеливая загрузка» – buzkall

1

Прежде всего, необходимо создать отношения,

<?php 

class Advert extends Eloquent { 

    public function car() 
    { 
     return $this->belongsTo('Car'); 
    } 

} 

class Car extends Eloquent { 

    public function model() 
    { 
     return $this->belongsTo('Model'); 
    } 

} 

class Model extends Eloquent { 

    public function brand() 
    { 
     return $this->belongsTo('Brand'); 
    } 

    public function cars() 
    { 
     return $this->hasMany('Car'); 
    } 

} 

class Brand extends Eloquent { 

    public function models() 
    { 
     return $this->hasMany('Model'); 
    } 

} 

Тогда вы просто должны открыть путь:

echo Advert::find(1)->car->model->brand->name; 

B ут ваши поля таблицы Шоуда быть, потому что Laravel угадать их таким образом:

id (for all tables) 
car_id 
model_id 
brand_id 

Или вы должны указать их в отношениях.