Подтвердить что ты не робот

Как связать отношения DB в Laravel (несколько has_many?)

Я использую Laravel, что является удивительным, но я застрял в проблеме с базой данных.

Скажем, у нас есть три таблицы, например:

ТАБЛИЦА 1: страницы

id    |   route   |  title

ТАБЛИЦА 2: элементы

id    |   page_id   |  type

ТАБЛИЦА 3: содержание

id    |   element_id   |  data

Я хотел бы сделать один выбор для страницы, который, в свою очередь, выберет все элементы с этим идентификатором страницы, и для каждого из элементов он должен выбрать все строки содержимого с идентификатором элемента.

Я хочу иметь статическую функцию load_by_route ($ route) в модели страницы, которая при вызове будет использовать маршрут для загрузки и возврата информации о странице, а также элементов и содержимого в виде описано выше. В идеале он возвратил бы один объект/массив со всей этой информацией.

В принципе, я не уверен, как объединить вызовы has_many() вместе, чтобы получить двухуровневые отношения.

4b9b3361

Ответ 1

Посмотрите на нетерпеливую загрузку. Это должно делать то, что вы хотите.

class Page extends Eloquent {

    public function elements()
    {
        return $this->has_many( 'Element' );
    }

}

class Element extends Eloquent {

    public function contents()
    {
        return $this->has_many( 'Content' );
    }

}

class Content extends Eloquent {}

$page = Page::with( array( 'elements', 'elements.contents' ) )->first();

https://laravel.com/docs/master/eloquent-relationships#eager-loading