我想知道,如果可以通过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关系。
答案 0 :(得分:0)
传统上,这不是你如何构建一对多的关系。要在数据库级别强制执行此操作,您只需将tbl_item_a.id
添加到tbl_item_b
表格,如:
tbl_item_b.item_a_id
然而,通过它的声音你已经知道了。而且我个人认为设置没有任何问题,只要它有记录(对未来的其他人来说)。
听到它的声音。您遇到的问题不在于数据库,而在于客户端呈现。您需要使用select FormHelper
函数:
echo $this->Form->select(/*field name*/, /*[options]*/)