ホームページ >バックエンド開発 >PHPチュートリアル >Doctrine2 のカスケード削除: ORM レベルの制約とデータベース レベルの制約?

Doctrine2 のカスケード削除: ORM レベルの制約とデータベース レベルの制約?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-03 16:55:02219ブラウズ

Cascade Deletion in Doctrine2: ORM-level vs. Database-level Constraints?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。