Получение отношений отношений с использованием Eloquent в Laravel
У меня есть база данных со следующими таблицами и отношениями:
Реклама 1-1
Автомобиль m-1
Модель m-1
Бренд
Если я хочу получить объявление, я могу просто использовать:
Advert::find(1);
Если мне нужны детали автомобиля, я могу использовать:
Advert::find(1)->with('Car');
Однако, если мне также нужна деталь модели (после отношения с Car), каков будет синтаксис, следующее не будет работать:
Advert::find(1)->with('Car')->with('Model');
Большое спасибо
Ответы
Ответ 1
Это в официальной документации под "Eager Loading"
Несколько отношений:
$books = Book::with('author', 'publisher')->get();
Вложенные отношения:
$books = Book::with('author.contacts')->get();
Итак, для вас:
Advert::find(1)->with('Car.Model')->get();
Ответ 2
Сначала вам нужно создать свои отношения,
<?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;
Но ваши поля таблицы будут такими, потому что Laravel догадывается, что они:
id (for all tables)
car_id
model_id
brand_id
Или вам нужно будет указать их в отношении.