CakePHP 3.0 通过 id 更新 hasOne 关联

CakePHP 3.0 hasOne association update by id

我有 ModelA,"hasOne" ModelB

我在 ModelB table 的数据库中已经有一行 ID 为 1,但是 modelA_id 设置为 NULL。现在我想在 ModelA table 中添加一行,我希望它与 ModelB 中 ID 为 1 的行相关联。

我试过:

$newA = $modelATable->newEntity(["modelB_id" => 1]);
$modelATable->save($newA);

确实在 ModelA table 中创建了一个新行,但是 ModelB table 中的 modelA_id 字段没有更新。

这个是干什么用的,例如:

$newA = $modelATable->newEntity(["modelB" => ["id" => 1, "modelA_id" => $newId]]);
$modelATable->save($newA);

但这很麻烦而且不是我真正想要的(无法提前知道 modelA_id -> 我只需要在添加新行后更新 modelA_id 字段)

ModelA 的实体 class 中 $_accessible 中正确设置关联 'modelB_id' = true

这是不可能的还是我没有理解正确的东西或者这只是我在某个地方的错误?使用第一段代码时不会抛出(验证)错误,这让我相信 Marshaller 不会对 modelB_id 做任何事情,它最终只是一个冗余字段。

非常感谢任何帮助!

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

你的第二个变体是正确的,但是不需要定义外键,你只需要传递主键,如果关联设置正确,外键字段将自动更新,即这就是关联所需的全部内容:

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

另见