Sistema de eventos en Doctrine, automatizar

Sistema de eventos en Doctrine

El sistema de eventos en Doctrine nos permite capturar determinados sucesos que ocurren en nuestras entidades, por ejemplo, podemos capturar cuando una entidad es creada o actualizada a través de las anotaciones @PreUpdate() y @PrePersist.

Cuando añadimos esa anotación a un método de nuestra entidad automáticamente entra en el sistema de eventos de Doctrine, pero antes debemos decirle a la entidad que va a soportar estos eventos con la anotación @HasLifecycleCallbacks.

Por lo tanto podemos setear propiedades de nuestra entidad de forma automática o hacer cualquier otra cosa, por ejemplo, podemos decir que una propiedad sólo se actualice si ésta ha cambiado haciendo uso de la clase PreUpdateEventArgs.

Enlaces que te pueden interesar:

En este tutorial vamos a ver cómo utilizar el sistema de eventos en Doctrine realizando una pequeña configuración en nuestros modelos haciendo uso de una entidad Employee.

Sistema de eventos en Doctrine para automatizar tareas

Lo primero que debemos hacer es definir la entidad Employee.


Cómo puedes ver tenemos dos métodos importantes, prePersist y preUpdate, cada una de ellas tiene un argumento que nos permitirá acceder a la información de la entidad en cada uno de los casos sin la necesidad de hacer nada más, de esta forma podemos aplicar la lógica que necesitemos en cada evento de nuestra entidad.

Si te fijas hemos definido el campo updated de tipo datetime y nullable @Column(type=”datetime”, nullable=true), lo hemos hecho así porque ese campo sólo será actualizado si se cambia el nombre del empleado, por poner un ejemplo.

Para crear un empleado y ver cómo se insertan de forma automática los campos created y random_key añade el siguiente código.


Si ahora añades el siguiente método verás que el usuario se ha insertado y los campos tienen valor, entre otros motivos porque no permiten valores nulos.


Por lo tanto los eventos a la hora de insertar están funcionando, veamos ahora que pasa cuando actualizamos un usuario.


Al haberle cambiado el nombre al empleado la lógica del evento preUpdate de Doctrine ha detectado que sí se ha cambiado y el campo update ahora tiene valor, para ello simplemente ejecuta de nuevo el método find_employee y verás que ahora el valor no es null.

Así de sencillo es trabajar con eventos en Doctrine, obviamente hay mucha tela que cortar todavía, pero la documentación lo deja todo muy claro.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información. ACEPTAR

Aviso de cookies