web-dev-qa-db-ja.com

Doctrine:cascade = "remove" vs orphanremoval = true

上記の2つのオプションの違いは何ですか?各オプションを選択するのが望ましいのはいつですか?

55
iiirxs

それらの基本的な違いは次のとおりです。

OrphanRemoval = trueオプションを使用する場合、Doctrineは、エンティティがプライベートに所有され、他のエンティティによって再利用されないという仮定を立てます。この仮定を無視すると、エンティティはDoctrine。

User1対多Commentとの関係があるとします。 cascade="remove"を使用している場合、1つCommentからUserの参照を削除できます。次に、そのCommentを別のUserにアタッチします。それらを永続化すると、それらは正しく保存されます。ただし、orphanRemoval=trueを使用している場合、指定されたCommentを1つUserから削除しても、そして、別のUserにアタッチすると、参照が削除されているため、このコメントは永続化中に削除されます。

102
Serge Kvashnin