Estoy usando las entidades de Doctrine 2. Tenemos algunas entidades que tienen que actualizar los elementos relacionados cuando se guardan en la base de datos. Por ejemplo, cuando se modifica un registro de usuario, lo guardamos como un nuevo registro, con el campo "inactivo" establecido en 'falso'. Sin embargo, tenemos que establecer el campo "inactivo" para todos los registros anteriores para ese usuario en "verdadero". Esto se hace para mantener un historial de auditoría. Es una base de datos heredada, por lo que cambiar la estructura no es una opción.Doctrine 2, Necesito ejecutar el código pre-persist/post-persist
Dado que Doctrine guarda objetos pasándolos a un objeto persistido (persist :: ($ thisObj)), en lugar de que el objeto tenga un método guardar ($thisObj->save()
), no podemos extender un método 'guardar' desde objeto primario La única opción que veo aquí es tratar de extender el objeto "persistir", pero eso suena como una manada de ganso, esperando a suceder.
Encontré algo de información sobre eventos, pero no veo cómo agregarlos para hacer que los eventos activen una función en particular cuando persiste una entidad en particular.
¿Cómo agrego la funcionalidad de guardado previo/posterior a algunas de mis entidades?
bien, descubierto por qué los acontecimientos a veces "simplemente se niegan a disparar". Los eventos prePersist/posPersist ocurren solo cuando se guarda un nuevo registro. Si está actualizando un registro existente, el preUPdate/postUpdate unifica el fuego en su lugar. Por lo tanto, aunque llame al método persist, si está guardando un objeto existente, se aplicarán los eventos de ciclo de vida preUpdate/postUpdate. –
Gracias por guiarme en la dirección correcta. Un seguimiento: Inherto todas mis entidades de una clase base para darle algunas características generales. Odio tener que poner un evento en cada entidad, porque en mi caso realmente uso postload para disparar el constructor, y quiero esto en todas las entidades. ¿Hay alguna manera de mover esto a la clase base sin tener que hacer mucho más copiar y pegar en la entidad? – redreinard
¡El segundo punto fue muy útil para mí! ¡Muchas gracias! –