Doctrine:cascade ="remove"vs orphanremoval = true

iii*_*rxs 58 doctrine cascade cascading-deletes symfony

上面两个选项有什么区别?什么时候最好选择每个选项?

Ser*_*nin 105

它们之间的基本区别是:

当使用orphanRemoval = true选项时,Doctrine假设这些实体是私有的,并且不会被其他实体重用.如果您忽略了这个假设,即使您将孤立实体分配给另一个实体,您的实体也会被Doctrine删除.

说你User一对多的关系Comment.如果你正在使用cascade="remove",您可以删除为参考Comment,从一个User,然后附上Comment到另一个User.当你坚持他们时,他们将被正确保存.但是如果您正在使用orphanRemoval=true,即使您将删除Comment一个User,然后附加到另一个User,此注释将在持久化期间被删除,因为该引用已被删除.

  • 这是一个很好的完整答案!谢谢! (3认同)
  • @a2ad2d **“私有”** 是什么意思?我知道 orphanRemoval=true 可以顺便用在多对多关系中 (2认同)