2010-09-20 54 views
6

我有一堆實體,同時具有date_created和date_modified字段,我試圖讓這些字段在插入或更新時自動設置自己。 date_created僅在插入時設置,但在插入或更新時設置了date_modified。學說2 preUpdate事件 - 插入時未觸發?

我在我的實體類中有一個@PreUpdate批註的方法,但它似乎只在實體更新時才被調用。當插入新實體時不會調用它。該文檔說明有關preUpdate事件:

「preUpdate事件發生在對實體數據的數據庫更新操作之前」。

這是正確的行爲嗎?如果是這樣,在更新或插入之前調用方法的最佳方法是什麼?目前,如果我標記既@PreUpdate和@PrePersist的方法,然後它的工作原理,但我不知道這是否是最佳的:

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

回答

9

堅持和更新是2個不同的事件,所以如果你想在回調是申請他們兩個然後你需要兩個註釋。它可能會滿足您的疑慮,而不是創建兩種方法:

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

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

謝謝 - 我認爲創建2種方法,並且這樣做,但我可以住一個。我只是不確定preUpdate是否僅用於更新或者插入和更新。 – 2010-09-20 19:49:51