2014-10-24 5 views
2

Есть ли способ доступа к исходным данным в afterSave? Я хотел бы внести изменения в важные данные.cakephp 3 исходные данные в afterSave

С $ entity-> isNew() Я мог проверить, была ли это вставка или обновление, но как я могу получить то, что изменилось?

ответ

4

Вы можете получить исходные значения через Entity::getOriginal() или Entity::extractOriginal(). Если вы хотите, чтобы все измененные поля, объединить последние один с Entity::visibleProperties(), что-то вроде:

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

Это должно вернуть исходные значения всех измененных полей.

Смотрите также

5

По 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() может использоваться для извлечения только оригинальных значений измененных атрибутов.

Смежные вопросы