rrd*_*rrd 4 cakephp cakephp-3.0
有没有办法在afterSave中访问原始数据?我想记录重要数据的变化.
使用$ entity-> isNew()我可以检查它是插入还是更新,但我怎样才能得到改变的内容?
您可以通过Entity::getOriginal()或访问原始值Entity::extractOriginal().如果你想获得所有更改的字段,请将后者与之结合使用Entity::visibleProperties(),例如:
debug($entity->extractOriginal($entity->visibleProperties()));
Run Code Online (Sandbox Code Playgroud)
这应返回所有已更改字段的原始值.
也可以看看
从CakePHP 3.0.4开始,您可以使用Entity :: extractOriginal(),它将返回任何字段的原始值,是否已更改,或使用Entity :: extractOriginalChanged(),它只返回更改的字段.
通过此更新,要重现接受的答案中描述的行为,您将需要以下内容:
public function afterSave(Event $event, Entity $entity, $options)
{
debug($entity->extractOriginalChanged($entity->visibleProperties()));
}
Run Code Online (Sandbox Code Playgroud)
请参阅CakePHP 3.0.4发行说明,说明:
EntityTrait :: extractOriginal()现在与extract()表现一致.这两种方法现在都包含所有命名属性[...]新方法extractOriginalChanged()可用于仅提取已更改属性的原始值.