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?

46
demandé sur Brian Tompsett - 汤莱恩 2014-08-27 00:56:55

1 réponses

La différence fondamentale entre les deux est:

Lorsqu'on utilise la Doctrine de l'option orphanRemoval=true fait la supposition les entités sont privées et ne seront PAS réutilisés par d'autres entité. Si vous négligez cette hypothèse, vos entités obtiendront supprimé par Doctrine même si vous avez assigné l'entité orpheline à un autre.

User a un-à-plusieurs rapport à Comment. Si vous utilisez cascade="remove", vous pouvez supprimer la référence pour Comment d'un User, et puis joignez Comment à un autre User. Lorsque vous les persistez, ils seront correctement sauvés. Mais si vous utilisez orphanRemoval=true, même si vous retirez donné Comment d'un User, et puis l'attacher à un autre User, ce commentaire sera supprimé lors de persister, parce que la référence a été supprimée.

87
répondu sergekv 2015-01-12 17:12:14