我有3个表 - register,items和item_kits
和一个联结表 - registers_items(Structure - register_id,item_id,item_kit_id,OTHER EXTRA COLUMNS)(item_id和item_kit_id引用它们各自的表,可以为NULL)
由于我有两个共同的额外列,我决定保留一个公共连接表。 RegistersTable.php中定义的关系是:
$this->belongsToMany('ItemKits', [
'foreignKey' => 'register_id',
'targetForeignKey' => 'item_kit_id',
'joinTable' => 'registers_items'
]);
$this->belongsToMany('Items', [
'foreignKey' => 'register_id',
'targetForeignKey' => 'item_id',
'joinTable' => 'registers_items'
]);
从“注册表”页面上的表单中,我传递了这个帖子数据:
[items] => Array
(
[0] => Array
(
[id] => 1
[_joinData] => Array
(
// All the extra columns data
)
)
// ....
)
[item_kits] => Array
(
[3] => Array
(
[id] => 2
[_joinData] => Array
(
// All the extra columns data
)
)
// ....
)
它仅保存了registers_items表中的项目。我希望他们都能得救。我错过了什么?
经过多次调试,我发现关系定义没有问题。问题是我使用单表作为2个结点。因此,第二个覆盖第一个,第一个关系的数据不会保存在表格中。我甚至尝试过'通过'选项但结果相同。有什么想法吗?
答案 0 :(得分:0)
我只是放弃了为两个关联建立公共连接表的想法,这违反了数据库规范化,正如您已经发现的那样,在处理应用程序代码时会使事情变得更加复杂。