ホームページ >バックエンド開発 >PHPチュートリアル >Doctrine2 のカスケード削除: ORM レベルの制約とデータベース レベルの制約?
Doctrine2 との関係の確立
Doctrine2 は、関係を管理するための 2 つのメカニズム、カスケード削除 と データベースを提供します。レベル制約の適用。どちらも同じ目的 (親エンティティが削除されたときに関連エンティティを削除する) を果たしますが、動作は異なります。
ORM レベル カスケード:
ORM レベル カスケードは、次のものを使用します。子エンティティに見られる cascade={"remove"} アノテーション。このオプションは、Doctrine の UnitOfWork のコンテキスト内でのみ、親が削除されたときに子エンティティを自動的に削除するように Doctrine2 に指示します。データベース制約は作成されません。
データベース レベルの制約の強制:
データベース レベルの制約の強制は、onDelete="CASCADE" を外部ファイルに追加することで実現されます。キー列の @ORMJoinColumn アノテーション。これは、関連する行が親テーブルから削除されたときに、子行を自動的に削除するようにデータベースに指示します。このオプションを子エンティティに実装するには、@ORMJoinColumn アノテーションを次のように変更します。
<code class="php">@ORM\JoinColumn(name="father_id", referencedColumnName="id", onDelete="CASCADE")</code>
カスケードの動作について:
カスケードの動作に注意することが重要です。一方向にのみ動作します。現在の構成では、親が削除されたときに子も削除されるようにカスケードが設定されています (子の cascade={"remove"})。ただし、子を削除しても親の削除はトリガーされません。その動作を望む場合は、カスケード設定を逆にするか、Father で orphanRemoval=true を指定して OneToMany 関係を使用する必要があります。
これらのカスケード メカニズムの違いを理解することで、Doctrine2 と Doctrine2 で効果的に関係を確立できます。ビジネス要件に従って、関連データが一貫して削除されていることを確認します。
以上がDoctrine2 のカスケード削除: ORM レベルの制約とデータベース レベルの制約?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。