cakephp 3在afterSave中的原始数据

rrd*_*rrd 4 cakephp cakephp-3.0

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

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

ndm*_*ndm 6

您可以通过Entity::getOriginal()或访问原始值Entity::extractOriginal().如果你想获得所有更改的字段,请将后者与之结合使用Entity::visibleProperties(),例如:

debug($entity->extractOriginal($entity->visibleProperties()));
Run Code Online (Sandbox Code Playgroud)

这应返回所有已更改字段的原始值.

也可以看看


Nic*_* C. 6

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