Событие DoUdrine 2 preUpdate - не сработало при вставке? - PullRequest
7 голосов
/ 20 сентября 2010

У меня есть несколько сущностей с полями date_created и date_modified, и я пытаюсь, чтобы эти поля автоматически устанавливались при вставке или обновлении.date_created устанавливается только при вставке, но date_modified устанавливается при вставке или обновлении.

В моем классе сущности есть метод с аннотацией @PreUpdate, но, кажется, он вызывается только при обновлении сущности.Он не вызывается, когда вставляется новый объект.В документации говорится об этом событии preUpdate:

«Событие preUpdate наступает до операций обновления базы данных до данных объекта.»

Это правильное поведение?Если это так, как лучше всего вызвать метод перед обновлением или вставкой?В настоящее время, если я помечаю метод как @PreUpdate и @PrePersist, тогда он работает, но я не уверен, что это оптимально:

/**
 * @PreUpdate
 * @PrePersist
 */
public function beforeSave()
{
    if (!$this->getCreatedAt()) {
        $this->setCreatedAt(new \DateTime());
    }
    $this->setModifiedAt(new \DateTime());
}

1 Ответ

11 голосов
/ 20 сентября 2010

Persist и Update - это два разных события, поэтому, если вы хотите, чтобы обратный вызов был применен к ним обоим, вам понадобятся обе аннотации.Это может удовлетворить ваши опасения, вместо этого создать два метода:

/**
 * @PrePersist
 */
public function beforePersist()
{
    $this->setCreatedAt(new \DateTime());        
    $this->setModifiedAt(new \DateTime());
}

/**
 * @PreUpdate
 */
public function beforeUpdate()
{        
    $this->setModifiedAt(new \DateTime());
}
...