4

有什么办法可以在 afterSave 中访问原始数据?我想记录重要数据的更改。

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

4

2 回答 2

6

Entity::getOriginal()您可以通过或访问原始值Entity::extractOriginal()。如果要获取所有更改的字段,请将后一个字段与 结合起来Entity::visibleProperties(),例如:

debug($entity->extractOriginal($entity->visibleProperties()));

这应该返回所有更改字段的原始值。

也可以看看

于 2014-10-24T17:35:09.520 回答
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 发行说明,说明:

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

于 2015-05-12T15:14:07.253 回答