有没有办法在afterSave中访问原始数据? 我想记录重要数据的变化。
使用$ entity-> isNew()我可以检查它是插入还是更新,但是如何才能获得更改?
答案 0 :(得分:6)
您可以通过Entity::getOriginal()
或Entity::extractOriginal()
访问原始值。如果要获取所有已更改的字段,请将后一个字段与Entity::visibleProperties()
结合使用,例如:
debug($entity->extractOriginal($entity->visibleProperties()));
这应返回所有已更改字段的原始值。
另见
答案 1 :(得分:6)
从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()可用于仅提取已更改属性的原始值。