【问题标题】:cakephp 3 original data in afterSavecakephp 3 原始数据在 afterSave
【发布时间】:2014-10-24 13:07:09
【问题描述】:

有没有办法在 afterSave 中访问原始数据? 我想记录重要数据的更改。

使用 $entity->isNew() 我可以检查它是插入还是更新,但我怎样才能得到更改的内容?

【问题讨论】:

    标签: cakephp cakephp-3.0


    【解决方案1】:

    您可以通过Entity::getOriginal()Entity::extractOriginal() 访问原始值。如果您想获取所有更改的字段,请将后者与 Entity::visibleProperties() 结合起来,例如:

    debug($entity->extractOriginal($entity->visibleProperties()));
    

    这应该返回所有更改字段的原始值。

    另见

    【讨论】:

      【解决方案2】:

      从 CakePHP 3.0.4 开始,您可以使用 Entity::extractOriginal(),它将返回任何字段的原始值,无论它是否已更改,或者使用 Entity::extractOriginalChanged(),它只会返回更改的字段。

      通过此更新,要重现已接受答案中描述的行为,您将需要类似以下内容:

      public function afterSave(Event $event, Entity $entity, $options)
      {
          debug($entity->extractOriginalChanged($entity->visibleProperties()));
      }
      

      参见CakePHP 3.0.4 Release Notes,声明:

      EntityTrait::extractOriginal() 现在的行为与 extract() 一致。这两种方法现在都包含所有命名属性 [...] 新方法 extractOriginalChanged() 可用于仅提取已更改属性的原始值。

      【讨论】:

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