cakephp 3在afterSave中的原始数据

时间:2014-10-24 13:07:10

标签: cakephp cakephp-3.0

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

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

2 个答案:

答案 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()可用于仅提取已更改属性的原始值。