CakePHP 3.0通过id进行了一次关联更新

时间:2015-03-27 12:27:55

标签: cakephp cakephp-3.0

我有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做任何事情,它最终会成为一个冗余字段。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

modelB_id上的ModelA字段在hasOne关联中没有任何意义,因为另一个表具有外键,即modelA_id,所以为什么编组会忽略它,这就是预期的行为。

您的第二个变体是正确的,但是不需要定义外键,您需要传递的只是主键,如果正确设置了关联,外键字段将自动更新,即这就是协会应该做的所有事情:

'modelB' => [
    'id' => 1
]

另见