@cron

Как в laravel создать вложенное отношение, которое выберет сущность по двум полям?

Всем привет.
У меня на сайте есть следующие сущности:

Page — Страница, например "контакты"
id, name

К странице подключается Block, через отношение belongsToMany('App\Block')
Block - Блок, например "seo"
id, name

К блоку подключаются поля, через hasMany('\App\Field');
Field - Поле, например "keywords" и "description",
id, block_id, name

Один блок может подключатся к разным страницам и при этом в него должны подгружаться разные данные.
Для этого я хочу сделать еще одну сущность Data, в которой будут хранится данные полей блоков:
field_id, page_id, value

Выбрать страницу я пытаюсь примерно следующим запросом:
$data = Page::with('blocks.fields')->find(42);
Но при этом я не понимаю как создать отношение для подгрузки данных.
Что-бы их выбрать нужно поставить два условия: id поля и id страницы

Подскажите, какое отношение можно применить, что бы создать такую выборку?
Спасибо!
  • Вопрос задан
  • 425 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Gesparo
Fullstack разработчик
Page::with(['data', 'data.field']->find(42);

где data
function data() {
  return $this->hasMany('App\Data');
}

а data.field и data.block находятся в моделе Data
function field() {
  return $this->hasOne('App\Field');
}


В таблицу data еще можно добавить block_id для удобства и вытягивать его как и при помощи функции field

По моему так, поправьте, если я не прав.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы