Doctrine: cascade="remove" vs orphanRemoval=true
SymfonyDoctrineCascadeCascading DeletesSymfony Problem Overview
What is the difference between the 2 options above? When is it preferable to choose each option?
Symfony Solutions
Solution 1 - Symfony
The basic difference between them is:
> When using the orphanRemoval=true option Doctrine makes the assumption > that the entities are privately owned and will NOT be reused by other > entities. If you neglect this assumption your entities will get > deleted by Doctrine even if you assigned the orphaned entity to > another one.
Say your User
has one-to-many relation to Comment
. If you are using cascade="remove"
, you can remove the reference for Comment
from one User
, and then attach that Comment
to another User
. When you persist them, they will be correctly saved. But if you are using orphanRemoval=true
, even if you will remove given Comment
from one User
, and then attach to another User
, this comment will be deleted during persist, because the reference has been deleted.