定义公共联结表的关系

时间:2015-10-16 15:04:04

标签: php cakephp cakephp-3.0

我有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个结点。因此,第二个覆盖第一个,第一个关系的数据不会保存在表格中。我甚至尝试过'通过'选项但结果相同。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我只是放弃了为两个关联建立公共连接表的想法,这违反了数据库规范化,正如您已经发现的那样,在处理应用程序代码时会使事情变得更加复杂。