一对多CakePHP3(通过匹配表)

时间:2017-06-26 10:54:48

标签: mysql orm associations cakephp-3.0

我想知道,如果可以通过DB中的匹配表在CakePHP3 中创建OneToMany关系。 这就是我的数据库的样子: Showcase of DB Schema

这是我的ItemA表:

    $this->belongsTo('ItemB', [
        'foreignKey' => 'item_a_id',
        'targetForeignKey' => 'item_b_id',
        'joinTable' => 'item_a_item_b'
    ]);

这是我的ItemB表:

    $this->belongsToMany('ItemA', [
        'foreignKey' => 'item_b_id',
        'targetForeignKey' => 'item_a_id',
        'joinTable' => 'item_a_item_b'
    ]);

但是,当我在模板中为ItemA创建一个Control时,它仍然给我一个Multiple Select。

echo $this->Form->control('item_b._ids', ['options' => $item_b, 'empty' => true]);

当我将此表单更改为单选时,将不会传递所选对象。我坚持多重选择:(

这是Cake中DB Schema的正确实现吗?我必须使用'通过'选项吗?我很困惑......

编辑#1:如果我使用belongsToMany而不是belongsTo配置ItemA,它会起作用。但这将是一个ManyToMany关系。

1 个答案:

答案 0 :(得分:0)

传统上,这不是你如何构建一对多的关系。要在数据库级别强制执行此操作,您只需将tbl_item_a.id添加到tbl_item_b表格,如:

tbl_item_b.item_a_id

然而,通过它的声音你已经知道了。而且我个人认为设置没有任何问题,只要它有记录(对未来的其他人来说)。

听到它的声音。您遇到的问题不在于数据库,而在于客户端呈现。您需要使用select FormHelper函数:

echo $this->Form->select(/*field name*/, /*[options]*/)