【发布时间】:2020-04-22 19:45:15
【问题描述】:
在我的表单中,如果输入字段未更改,我不想更新数据库中的特定字段。如何在 beforesave() 中实现这一点?我试过$entity->unset($fieldName); 但这不起作用。
更新:
在我的表单中,对于一个字段,我将加密数据保存在数据库中,并且在 beforeFind() 中,如果该字段在数据库中不为空,则此输入设置为 "*** ***"。我这个字段的加密代码在 beforeSave() 中。仅当它不是 "*** ***" 时,我才想更新此字段。
【问题讨论】:
-
如果您遵循标准的 Cake 实践(即获取、修补和保存实体),那么您所要求的应该已经发生了。如果不是,请提供一些代码和 SQL 日志来演示您的场景。
-
如何在修补实体之前从发布的数据中删除该字段,例如在
beforeMarshal? -
@GregSchmidt 我在 beforeMarshal() 中尝试了
if ($data['fieldName'] === "*** ***") { unset($data['fieldName']); }。但该字段仍在数据库中更新为 *** ***。 -
传递给
beforeMarshal的值是一个ArrayObject,而不是一个数组。使用offsetUnset 从中删除一个值。 -
感谢@GregSchmidt 我已将代码更改为
if ($data['fieldName'] === "*** ***") { $data->offsetUnset("fieldName"); //var_dump($data);die(); }$data 没有“字段名”。但是这个文件仍然更新为“*** ***”
标签: forms cakephp-3.0 before-save