【问题标题】:Doctrine 2 preUpdate event - not triggered on insert?Doctrine 2 preUpdate 事件 - 插入时未触发?
【发布时间】:2010-09-21 03:46:38
【问题描述】:

我有一堆具有 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());
}

【问题讨论】:

    标签: php doctrine


    【解决方案1】:

    Persist 和 Update 是 2 个不同的事件,因此如果您希望回调同时应用于它们,那么您将需要这两个注释。改为创建两种方法可能会满足您的疑虑:

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

    【讨论】:

    • 谢谢 - 我考虑过创建 2 种方法并这样做,但我可以接受一个。我只是不确定 preUpdate 是否合法地仅用于更新,或者同时用于插入和更新。
    猜你喜欢
    • 2012-03-30
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多