【发布时间】:2014-10-24 13:07:09
【问题描述】:
有没有办法在 afterSave 中访问原始数据? 我想记录重要数据的更改。
使用 $entity->isNew() 我可以检查它是插入还是更新,但我怎样才能得到更改的内容?
【问题讨论】:
标签: cakephp cakephp-3.0
有没有办法在 afterSave 中访问原始数据? 我想记录重要数据的更改。
使用 $entity->isNew() 我可以检查它是插入还是更新,但我怎样才能得到更改的内容?
【问题讨论】:
标签: cakephp cakephp-3.0
您可以通过Entity::getOriginal() 或Entity::extractOriginal() 访问原始值。如果您想获取所有更改的字段,请将后者与 Entity::visibleProperties() 结合起来,例如:
debug($entity->extractOriginal($entity->visibleProperties()));
这应该返回所有更改字段的原始值。
另见
【讨论】:
从 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() 可用于仅提取已更改属性的原始值。
【讨论】: