ホームページ >バックエンド開発 >PHPチュートリアル >Doctrine2 で On Delete Cascade を適切に実装するにはどうすればよいですか?

Doctrine2 で On Delete Cascade を適切に実装するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-04 04:30:291000ブラウズ

How to Properly Implement On Delete Cascade in Doctrine2?

Doctrine2: On Delete Cascade について

Doctrine2 の On Delete Cascade の概念により、親レコードが削除されたときに子レコードを自動的に削除できます。が削除されます。この機能は、参照整合性を維持することによってデータの整合性を保証します。

Doctrine2 での On Delete Cascade の実装

On Delete Cascade を実装するには、次の 2 つのアプローチがあります。

  1. オブジェクト リレーショナル マッピング (ORM) レベル:

    • 子エンティティ内の関連付けで cascade={"remove"} を指定します。
    • これは、親オブジェクトが削除されたときに、関連付けられているすべての子オブジェクトを削除するように Doctrine に指示します。ただし、データベース構造には影響しません。
  2. データベース レベル:

    • に onDelete="CASCADE" を追加します。子エンティティ内の関連付けの結合列。
    • これにより、参照された親レコードが削除されたときに子レコードを自動的に削除するデータベース制約が作成されます。

エンティティの修正

この例では、ORM レベルのアプローチを使用していますが、結合列の onDelete="CASCADE" 属性を見逃しています。これを修正するには、Child.php エンティティを次のように変更します。

<code class="php">/**
 * @ORM\ManyToOne(targetEntity="Father", cascade={"remove"})
 * @ORM\JoinColumn(name="father_id", referencedColumnName="id", onDelete="CASCADE")
 *
 * @var Father
 */
private $father;</code>

注意事項

  • ORM レベルのカスケード cascade={"remove"現在実装されているように、子オブジェクトが削除されると親オブジェクトも削除されます。これは通常は望ましくないことです。
  • そのため、削除動作をより適切に制御するには、onDelete="CASCADE" を指定してデータベース レベルのカスケードを使用することをお勧めします。

以上がDoctrine2 で On Delete Cascade を適切に実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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