relations onetomany one manytoone manytomany many delete symfony doctrine cascade cascading-deletes

symfony - onetomany - Doctrine: cascade="remove" vs orphanremoval=true



onetomany cascade delete symfony (1)

¿Cuál es la diferencia entre las 2 opciones anteriores? ¿Cuándo es preferible elegir cada opción?


La diferencia básica entre ellos es:

Al utilizar la opción orphanRemoval = true, Doctrine asume que las entidades son de propiedad privada y NO serán reutilizadas por otras entidades. Si descuida esta suposición, Doctrine eliminará sus entidades, incluso si asignó la entidad huérfana a otra.

Supongamos que su User tiene una relación uno a muchos con los Comment . Si usa cascade="remove" , puede eliminar la referencia de Comment de un User y luego adjuntar ese Comment a otro User . Cuando los persista, se guardarán correctamente. Pero si está utilizando orphanRemoval=true , incluso si elimina un Comment dado de un User y luego lo adjunta a otro User , este comentario se eliminará durante la persistencia, porque la referencia se ha eliminado.