1. ホーム
  2. symfony

Doctrine: cascade="remove" vs orphanRemoval=true

2023-08-31 15:47:11

質問

上記の2つの選択肢の違いは何ですか?また、どのような場合にそれぞれの選択肢を選ぶとよいですか?

どのように解決するのですか?

両者の基本的な違いは

orphanRemoval=true オプションを使うとき、Doctrine はエンティティが個人所有であり はエンティティが個人所有のものであり、他のエンティティによって再利用されることはない、と仮定します。 エンティティに再利用されることはありません。この仮定を無視した場合、エンティティは によって削除されてしまいます。 を別のエンティティに割り当てたとしても、Doctrine によって削除されてしまいます。

例えば、あなたの User があります。 一対多 との関係 Comment . もし、あなたが cascade="remove" を使用している場合は Comment を一つの User というように、その Comment を別の User . それらを永続化すると、正しく保存されます。しかし、もしあなたが orphanRemoval=true を使っている場合は、たとえ与えられた Comment を1つの User を作成し、別の User を付けると、参照が削除されたため、このコメントは永続化中に削除されます。