Получение отношений отношений с использованием 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

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