2010-09-20 19 views
6

Possiedo un gruppo di entità con un campo date_created e date_modified e sto tentando di impostare automaticamente questi campi su insert o update. date_created è impostato solo su insert, ma date_modified è impostato sia in insert che in update.Doctrine 2 evento preUpdate: non attivato all'inserimento?

Ho un metodo nella mia classe di entità con un'annotazione @PreUpdate, ma sembra essere richiamato solo quando un'entità viene aggiornata. Non viene chiamato quando viene inserita una nuova entità. La documentazione lo dice sull'evento preUpdate:

"L'evento preUpdate si verifica prima delle operazioni di aggiornamento del database sui dati di entità."

È corretto questo comportamento? In tal caso, qual è il modo migliore per avere un metodo chiamato prima di aggiornare o inserire? Attualmente se i codici del metodo sia con @PreUpdate e @PrePersist allora funziona, ma non sono sicuro se questo è ottimale:

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

risposta

9

persistono e aggiornamento sono 2 eventi diversi, quindi se si desidera che il callback per essere applicato per entrambi, quindi avrai bisogno di entrambe le annotazioni. Può soddisfare i tuoi dubbi invece di creare due metodi:

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

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

Grazie - Ho considerato la creazione di 2 metodi e farlo in questo modo, ma posso vivere con uno. Non ero sicuro che il preUpdate fosse legittimo solo per gli aggiornamenti, o sia per gli inserti che per gli aggiornamenti. –