有什么办法可以在 afterSave 中访问原始数据?我想记录重要数据的更改。
使用 $entity->isNew() 我可以检查它是插入还是更新,但我怎样才能得到改变?
有什么办法可以在 afterSave 中访问原始数据?我想记录重要数据的更改。
使用 $entity->isNew() 我可以检查它是插入还是更新,但我怎样才能得到改变?
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 发行说明,说明:
EntityTrait::extractOriginal() 现在的行为与 extract() 一致。这两种方法现在都包含所有命名属性 [...] 新方法 extractOriginalChanged() 可用于仅提取更改属性的原始值。