【问题标题】:how to prevent updating a field in CakePHP 3 beforesave()?如何防止更新 CakePHP 3 beforesave() 中的字段?
【发布时间】: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


【解决方案1】:

当$entity->unset($fieldName); 更改为unset($entity->$fieldName); 时,我的代码运行良好

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    相关资源
    最近更新 更多