use*_*505 2 cakephp cakephp-3.0
根据要求,这是$this->request->data我的表格,
'office' => 'LON-test33',
'phone' => '456456456',
'address' => [
'addline1' => '1 test0009 st',
'addline2' => 'p09987',
'addline3' => 'test9999',
'postcode' => 'p888',
'country_id' => '226'
],
Run Code Online (Sandbox Code Playgroud)
所以办公室,电话是我办公室表的一部分,地址是整个地址表。
我还做了一个测试,看看它是否在模型中,只是尝试通过提供一个 ID 来更新地址表。哪个有效,所以我认为我的模型很好。所以我在想是与 Office 模型有关还是我的代码有问题?
谢谢,
所以我正在使用 CakePHP 3.0.something ....
我正在尝试更新与办公室表相关联的数据的地址。但是,当我更新办公室时,地址被保存为一个全新的记录?不知道为什么?
这是我目前正在做的事情,
$OfficeTable = TableRegistry::get('Offices');
$CurrentOffice = $OfficeTable->get($OfficeID);
$OfficeTable->patchEntity($CurrentOffice, $this->request->data, ['associated' => ['Addresses']]);
debug( $OfficeTable->save($CurrentOffice) );
Run Code Online (Sandbox Code Playgroud)
Associated在 patchEntity 中设置似乎没有什么区别,更新后的地址被保存,而是作为新记录。然后将此新记录 ID 放入 Office 表的“address_id”字段中。
但是为什么要将这个“新的/编辑过的”地址添加为新记录而不更新关联的 id 记录?
现在我一直在阅读文档,并形成我所理解的,如果找不到记录,它会重新记录吗?但是,我已经调试了保存调用,并且在 office 和 address 上都将“[new]”设置为 false。那么为什么要更新我的办公室,却在告诉我它不是新地址时创建一个新地址呢?
所以要补充的是,在我的调试调用的底部有一个 '[original]',它包含它应该更新的记录的旧地址 ID。
那么我做错了什么?
如果我没有正确解释自己(我有阅读障碍),那么请告诉我,或者如果有任何遗漏我可以更新 - 谢谢
通常有两种方法可以解决这个问题,
或者通过将 ID 与请求数据一起传递,正如您所发现的,这需要将 ID 字段设置为实体中可访问的字段,以便可以在修补过程中进行设置
或者通过确保 ID 已经存在于您要修补的实体中,例如通过在检索实体时包含关联
$CurrentOffice = $OfficeTable->get($OfficeID, [
'contain' => [
'Addresses'
]
]);
Run Code Online (Sandbox Code Playgroud)我个人会推荐后一种方法,因为它可能存在的陷阱较少,因为您不需要使 ID 可访问。我建议您在此处阅读:防止恶意用户在添加操作时更新数据
话虽如此,您与办公室一起编辑地址的事实似乎有点奇怪,因为更改地址详细信息将“影响”所有办公室,因此通常不需要同时编辑两者。然而,这只是一个相当肤浅的问题,因为我不了解您的应用程序内部结构和要求。
| 归档时间: |
|
| 查看次数: |
3876 次 |
| 最近记录: |