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
]
另见
我有 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
]
另见