Doctrine2 による削除カスケードについて理解する
Doctrine2 では、関連エンティティを操作するときにカスケード動作を柔軟に設定できます。ただし、よくある誤解は、エンティティの関連付けで cascade={"remove"} を設定すると、データベースの外部キー列に ON DELETE CASCADE オプションが自動的に追加されるということです。
Doctrine2 には 2 つの異なるタイプがあります。カスケードの数:
1. ORM レベルのカスケード:
2.データベースレベルのカスケード:
質問に示されている例では、ORM レベルのカスケードが使用されています。親を削除するときに、関連付けられた子オブジェクトは正しく削除されますが、データベースに ON DELETE CASCADE オプションは作成されません。これを実現するには、次の変更が必要です。
<code class="php">/** * @ORM\ManyToOne(targetEntity="Father", cascade={"remove"}) * * @ORM\JoinColumns({ * @ORM\JoinColumn(name="father_id", referencedColumnName="id", onDelete="CASCADE") * }) * * @var Father */ private $father;</code>
この例のように ORM レベルのカスケードを使用すると、子オブジェクトが削除されるときに親オブジェクトも削除されることに注意することが重要です。これは意図した動作ではない可能性があります。
以上がDoctrine2 は ON DELETE CASCADE を使用したカスケード動作をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。