我有ModelA
,其中" hasOne" ModelB
。
我的ModelB
表中的数据库中已有一行ID为1,但modelA_id
设置为NULL
。现在我想在ModelA
表中添加一行,并希望它与ID为1的ModelB
中的行相关联。
我尝试过:
$newA = $modelATable->newEntity(["modelB_id" => 1]);
$modelATable->save($newA);
确实在ModelA
表中创建了一个新行,但modelA_id
表中的ModelB
字段未更新。
这是什么工作,例如:
$newA = $modelATable->newEntity(["modelB" => ["id" => 1, "modelA_id" => $newId]]);
$modelATable->save($newA);
但这很麻烦而且不是我想要的(事先不能知道modelA_id - >我只需要在添加新行后更新modelA_id
字段)
在'modelB_id' = true
的实体类$_accessible
中正确设置了关联ModelA
。
这是不可能的,还是我不理解某些事情,或者这只是我在某处的错误?使用第一段代码时会抛出(验证)错误,这让我相信Marshaller不会对modelB_id
做任何事情,它最终会成为一个冗余字段。
非常感谢任何帮助!
答案 0 :(得分:1)
modelB_id
上的ModelA
字段在hasOne
关联中没有任何意义,因为另一个表具有外键,即modelA_id
,所以为什么编组会忽略它,这就是预期的行为。
您的第二个变体是正确的,但是不需要定义外键,您需要传递的只是主键,如果正确设置了关联,外键字段将自动更新,即这就是协会应该做的所有事情:
'modelB' => [
'id' => 1
]
另见