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.