afterSave中的cakephp 3原始数据

afterSave中的cakephp 3原始数据,cakephp,cakephp-3.0,Cakephp,Cakephp 3.0,有没有办法访问afterSave中的原始数据? 我想记录重要数据的变化 使用$entity->isNew(),我可以检查它是插入还是更新,但如何才能得到更改的内容?您可以通过entity::getOriginal()或entity::extractOriginal()访问原始值。如果要获取所有更改的字段,请将后一个字段与实体::visibleProperties()组合,类似于: public function afterSave(Event $event, Entity $entity, $o

有没有办法访问afterSave中的原始数据? 我想记录重要数据的变化


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

您可以通过
entity::getOriginal()
entity::extractOriginal()访问原始值。如果要获取所有更改的字段,请将后一个字段与
实体::visibleProperties()
组合,类似于:

public function afterSave(Event $event, Entity $entity, $options)
{
    debug($entity->extractOriginalChanged($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()));
}
见,说明:

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