Как связать отношения 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() вместе, чтобы получить двухуровневые отношения.
Ответы
Ответ 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