У меня проблема, но мне интересно, делаю ли я что-то неправильно.
Моя ситуация такова:
- У меня есть таблица "pages", которая содержит список страниц на веб-сайте.
- Каждая страница может содержать множество «модулей» (Форма, Календарь и т. Д.). Итак, у меня есть таблица под названием «Модули»
- У меня есть сводная таблица "module_page", которая связывает модули со страницами
- Наконец, модуль "form" является универсальным. Существуют различные виды форм (форма обратной связи, регистрационные формы и т. Д.). Итак, у меня есть таблица под названием "формы"
Для целей данного примера меня интересует только модуль «Форма». Сами отдельные формы являются конкретными примерами «формы», поэтому я назвал их «спецификой»
pages modules
+----+--------+ +----+----------+
| id | name | | id | name |
+----+--------+ +----+----------+
| 1 | page a | | 1 | calendar |
+----+--------+ +----+----------+
| 2 | page b | | 2 | form |
+----+--------+ +----+----------+
forms module_page
+----+--------+ +---------+-----------+-------------+
| id | name | | page_id | module_id | specific_id |
+----+--------+ +---------+-----------+-------------+
| 1 | form a | | 1 | 2 | 1 |
+----+--------+ +---------+-----------+-------------+
| 2 | page b | | 2 | 2 | 2 |
+----+--------+ +---------+-----------+-------------+
Модель моей страницы выглядит следующим образом
page.php
public function modules()
{
return $this->belongsToMany(Module::class)->withPivot('specific_id')
}
когда я запускаю $page = Page::where('id', 1)->with('modules');
, я успешно получаю следующее
Array
(
[id] => 1
[name] => page a
[modules] => Array
(
[0] => Array
(
[id] => 2
[name] => form
[pivot] => Array
(
[page_id] => 4
[module_id] => 6
[specific_id] => 1
)
)
)
)
Пока все хорошо. Но то, что я хотел бы сделать сейчас, это включить конкретную форму в качестве дочернего элемента модуля. Таким образом, результат будет:
Array
(
[id] => 1
[name] => page a
[modules] => Array
(
[0] => Array
(
[id] => 2
[name] => form
[specific] => Array
(
[id] => 1
[name] => form a
)
[pivot] => Array
(
[page_id] => 4
[module_id] => 6
[specific_id] => 1
)
)
)
)
У меня проблемы с этим, потому что specific_id является частью сводной таблицы, а не частью модуля. Я попробовал следующее в попытке «закрой глаза и надейся на лучшее», но, очевидно, это не сработало
module.php
public function specifics()
{
return $this->hasOne(Form::class, 'id', 'pivot.specific_id');
}
$page = Page::where('id', 1)->with('modules.specifics');
Какое лучшее решение?
Спасибо