我遇到了问题,但想知道我是否做错了方向。
我的情况是这样:
就本示例而言,我仅对“表单”模块感兴趣。各个表单本身是“表单”的特定实例,所以我称它们为“特定”
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');
什么是最佳解决方案?
谢谢