Php 定义公共连接表的关系

Php 定义公共连接表的关系,php,cakephp,cakephp-3.0,Php,Cakephp,Cakephp 3.0,我有3个表-寄存器、项目和项目套件 和一个连接表-registers\u items Structure-register\u id、item\u id、item\u kit\u id、其他额外列item\u id和item\u kit\u id引用各自的表,可以为空 由于它们都有共同的额外列,所以我决定保留一个共同的连接表。RegistersTable.php中定义的关系包括: $this->belongsToMany('ItemKits', [ 'foreignKey' =&g

我有3个表-寄存器、项目和项目套件

和一个连接表-registers\u items Structure-register\u id、item\u id、item\u kit\u id、其他额外列item\u id和item\u kit\u id引用各自的表,可以为空

由于它们都有共同的额外列,所以我决定保留一个共同的连接表。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'
]);
从注册表页上的表单中,我传递以下post数据:

[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\u items表中的项目。我希望他们俩都能得救。我错过了什么


在进一步调试之后,我发现关系定义没有问题。问题是我对两个连接使用单个表。所以,第二个关系覆盖第一个关系,第一个关系的数据不会保存在表中。我甚至尝试了“通过”选项,但结果相同。有什么想法吗?

我不想为这两个关联使用一个公共联接表,这不利于数据库规范化,正如您已经发现的那样,这会使处理应用程序代码时的事情更加复杂