Symfony 5, Error eliminando objeto: creando nuevo ID en lugar de eliminar objeto en relación uno a uno.
Tengo una asociación OneToOne
con entidades llamadas Record
y AnalyseOfCause
.
Cuando envío la entidad Record
a mi controlador y quiero eliminar la AnalyseOfCause
relacionada con ella, en lugar de eliminar el objeto AnalyseOfCause
, simplemente mantiene el mismo objeto y cambia su ID dándole un nuevo último ID sin eliminarlo.
PD: Cuando no llamo al objeto Record
en absoluto y quiero eliminar AnalyseOfCause
directamente enviando su ID y encontrándolo directamente en otra función, funciona. Así que no entiendo cuál es el problema.
(Observé que cuando busco el objeto analyseOfCause
en la función por doctrine->repo->find(id)
, se elimina, pero cuando llamo al objeto Record
en la misma función, aunque la eliminación funcionaba previamente, deja de funcionar. Y lo extraño es que si hago “ctrl + z” y vuelvo a la versión de trabajo, todavía no funciona, es un comportamiento extraño).
PD: No para esos 2 objetos, pero para otros objetos, uso el paquete Softdeletable en mi aplicación. No sé si tiene algo que ver con este problema.
Gracias de antemano por su ayuda 🙂
davy.ai
Solución para el problema con la asociación OneToOne y la eliminación de la entidad AnalyseOfCause
Basado en la información y fragmentos de código proporcionados, parece que el problema se relaciona con las opciones de cascada configuradas para la asociación OneToOne entre las entidades ‘Record’ y ‘AnalyseOfCause’.
Por defecto, la asociación ‘OneToOne’ en Symfony no tiene habilitadas opciones de cascada. Esto significa que cuando se elimina una entidad ‘Record’, la entidad relacionada ‘AnalyseOfCause’ no se eliminará automáticamente, y tendrás que eliminarla manualmente.
Para solucionar este problema, puedes agregar la opción ‘cascade={“remove”}’ a la asignación de la asociación ‘OneToOne’ en tu entidad ‘Record’. Esto habilitará la eliminación automática de la entidad relacionada ‘AnalyseOfCause’ al eliminar una entidad ‘Record’.
Aquí tienes un ejemplo de cómo puedes actualizar tu entidad ‘Record’ para agregar la opción ‘cascade={“remove”}’:
Asegúrate de actualizar tu esquema después de realizar estos cambios usando el siguiente comando:
Después de este cambio, al eliminar una entidad ‘Record’ utilizando el método ‘remove()’, eliminará automáticamente la entidad relacionada ‘AnalyseOfCause’.
Si aún se enfrenta al problema, intenta verificar si hay habilitadas otras opciones de cascada para las entidades relacionadas.
Espero que esto ayude a resolver tu problema.