ホームページ  >  記事  >  バックエンド開発  >  Doctrine2 は ON DELETE CASCADE を使用したカスケード動作をどのように処理しますか?

Doctrine2 は ON DELETE CASCADE を使用したカスケード動作をどのように処理しますか?

DDD
DDDオリジナル
2024-11-02 08:28:02758ブラウズ

How Does Doctrine2 Handle Cascade Behavior with ON DELETE CASCADE?

Doctrine2 による削除カスケードについて理解する

Doctrine2 では、関連エンティティを操作するときにカスケード動作を柔軟に設定できます。ただし、よくある誤解は、エンティティの関連付けで cascade={"remove"} を設定すると、データベースの外部キー列に ON DELETE CASCADE オプションが自動的に追加されるということです。

Doctrine2 には 2 つの異なるタイプがあります。カスケードの数:

1. ORM レベルのカスケード:

  • エンティティの関連付けで cascade={"remove"} を使用します。
  • 作業単位 (UoW) によって実行される計算。
  • 関連オブジェクトを反復処理し、親オブジェクトが削除された場合にそれらを削除します。削除されました。

2.データベースレベルのカスケード:

  • エンティティ関連付けの結合列に onDelete="CASCADE" を使用します。
  • エンティティ関連付けの外部キー列に ON DELETE CASCADE オプションを作成します。

質問に示されている例では、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 サイトの他の関連記事を参照してください。

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