Doctrine 2 preUpdate事件 - 在插入时未触发?

时间:2010-09-20 19:22:40

标签: php doctrine

我有一堆同时包含date_created和date_modified字段的实体,我试图让这些字段在插入或更新时自动设置。 date_created仅在insert处设置,但date_modified在insert或update处设置。

我的实体类中有一个带有@PreUpdate注释的方法,但它似乎只在实体更新时被调用。插入新实体时不会调用它。文档说明了关于preUpdate事件:

“preUpdate事件发生在对实体数据的数据库更新操作之前。”

这是正确的行为吗?如果是这样,在更新或插入之前调用方法的最佳方法是什么?目前,如果我用@PreUpdate和@PrePersist标记方法,那么它可以工作,但我不确定这是否是最佳的:

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

1 个答案:

答案 0 :(得分:11)

持久和更新是两个不同的事件,所以如果你想要为它们应用回调,那么你将需要两个注释。它可以满足您的疑虑,而不是创建两种方法:

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

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