Estoy luchando con lo siguiente, en una clase de entidad tengo un preUpdate lifeCycleCallback que tiene que persistir una nueva entidad antes de que se vacíe los cambios para un auditTrail.Doctrine 2.1 Persist entidad en preUpdate lifeCycleCallback
En preRemove y prePersist esto funciona a la perfección pero en preUpdate no pasa nada. Si llamo a flush yo, va en un bucle recursivo.
De acuerdo con los grupos de Google para el usuario de doctrina, ponerlo en Flush debe ser una opción, pero en ese caso no puedo acceder a los valores anteriores de la entidad para guardar estos valores antiguos en otra entidad para el audittrail.
Algunos pequeño ejemplo de lo que estoy tratando de archivo:
<?php
/**
* @Entity
* @HasLifeCycleCallbacks
*/
class someEntity {
... annotations ...
/**
* @PreUpdate
*/
public function addAuditTrail() {
$em = \Zend_Registry::get('doctrine')->getEntityManager();
$entity = new AuditTrail();
$entity->action = 'update';
$entity->someField = $this->someField;
$em->persist($entity); //this just doesn't do anything :-(
}
}
?>
No es verdadero código, sólo algo para ilustrar lo que quiero. También probé algo como esto:
$em->getUnitOfWork()->computeChangeSet($em->getClassMetaData(get_class($entity)), $entity);
que deberían funcionar de acuerdo a este tema: http://groups.google.com/group/doctrine-user/browse_thread/thread/bd9195f04857dcd4
Si llamo al ras de nuevo, pero que causa Apache se colapse debido a algún bucle infinito.
¿Alguien que tiene ideas para mí? ¡Gracias!
¿Por qué no se debe utilizar el gestor de entidades dentro de mis entidades? Y si asigna el AuditEntity a SomeEntity, se asociará en la base de datos y no es lo que quiero copiar mis entidades y agregará otros campos como "acción" = actualizar, etc. Esta AuditEntity fue solo un ejemplo porque para auditar utilizo : https://github.com/keesschepers/EntityAudit –
Usaría el eventmanager. Quería echarle un vistazo a tu código, pero aún no hay tiempo. – tvlooy
Finalmente (¡hace un año!) Usé el gestor de eventos (EventSubscriber) para realizar estas tareas de forma global. He incluido esto en mi marco: https://github.com/php-pike/Pike (mira la parte de EntityAudit) ¡gracias! –