2010-09-20 9 views
6

Tengo un grupo de entidades con un campo fecha_creada y fecha_modificada, y estoy intentando que estos campos se configuren automáticamente en insertar o actualizar. date_created solo se establece en insert, pero date_modified se establece en insert o update.Evento de preactualización de Doctrine 2: ¿no se activó en la inserción?

que tienen un método en mi clase de entidad con una anotación @PreUpdate, pero sólo parece que se llama cuando se actualiza una entidad. No se llama cuando se inserta una nueva entidad. La documentación dice esto sobre el evento preUpdate:

"El evento preUpdate ocurre antes de las operaciones de actualización de la base de datos de la entidad."

¿Es este comportamiento correcto? De ser así, ¿cuál es la mejor manera de llamar a un método antes de actualizar o insertar? Actualmente, si se etiquetan con el método tanto @PreUpdate y @PrePersist entonces funciona, pero no estoy seguro si esto es óptima:

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

Respuesta

9

persisten y actualización son 2 eventos diferentes por lo que si desea que la devolución de llamada a ser aplicado para ambos, entonces necesitarás ambas anotaciones. Puede satisfacer sus dudas en lugar de crear dos métodos:

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

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

Gracias - Consideré crear 2 métodos y hacerlo de esta manera, pero puedo vivir con uno. Simplemente no estaba seguro de si preUpdate era legítimamente solo para actualizaciones o insertos y actualizaciones. –

Cuestiones relacionadas