web-dev-qa-db-fra.com

Doctrine: cascade = "supprimer" vs orphanremoval = true

Quelle est la différence entre les 2 options ci-dessus? Quand est-il préférable de choisir chaque option?

55
iiirxs

La différence fondamentale entre eux est:

Lorsque vous utilisez l'option orphanRemoval = true Doctrine fait l'hypothèse que les entités sont privées et ne seront PAS réutilisées par d'autres entités. Si vous négligez cette hypothèse, vos entités seront supprimées par Doctrine même si vous avez affecté l'entité orpheline à une autre.

Dites que votre User a n-à-plusieurs relation avec Comment. Si vous utilisez cascade="remove", vous pouvez supprimer la référence de Comment à une User, puis attachez ce Comment à un autre User. Lorsque vous les persistez, ils seront correctement enregistrés. Mais si vous utilisez orphanRemoval=true, même si vous supprimez donné Comment d'un User, puis attachez-le à un autre User, ce commentaire sera supprimé pendant la persistance, car le la référence a été supprimée.

102
Serge Kvashnin