Doctrine2: シームレスなデータベース メンテナンスのために On Delete Cascade を実装するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-03 18:16:03
オリジナル
746 人が閲覧しました

Doctrine2: How Do I Implement On Delete Cascade for seamless database maintenance?

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

データベースをシームレスに保守するには、多くの場合、対応する親レコードが削除されたときに子レコードを自動的に削除する必要があります。 。 Doctrine2 は、「On Delete Cascade」を通じてこの機能をサポートしています。この機能は、親レコードが削除されたときに子レコードも確実に削除されるようにします。

エンティティの例

次のエンティティについて考えてみましょう。

<code class="php">class Child {
    /** @ORM\ManyToOne(targetEntity="Father", cascade={"remove"}) */
    private $father;
}

class Father {
    /** @ORM\Id @ORM\GeneratedValue */
    private $id;
}</code>
ログイン後にコピー

問題: データベース カスケードが欠落しています

コードは「削除」カスケードを使用して子と父の間の関係を確立しますが、データベースには「削除時」が欠落しています。 Cascade" 制約。

解決策: データベース レベルのカスケード

真の On Delete Cascade を実装するには、onDelete="CASCADE" を子の結合列に追加します。

<code class="php">/** @ORM\JoinColumn(name="father_id", referencedColumnName="id", onDelete="CASCADE") */</code>
ログイン後にコピー

これは、親テーブルから行が削除されると、子テーブル内の一致する行がすべて自動的に削除されることを指定します。

注意: カスケードについて理解してください

ORM レベルのカスケードとデータベース レベルのカスケードの違いに注意することが重要です。 ORM レベルのカスケードは Doctrine の UnitOfWork 内で動作し、データベース構造に影響を与えませんが、データベース レベルのカスケードはデータベースに物理的な制約を作成します。現在の例では、cascade={"remove"} は、UnitOfWork での再帰的削除をトリガーする ORM レベルのカスケードですが、データベースの望ましい動作は生じません。

以上がDoctrine2: シームレスなデータベース メンテナンスのために On Delete Cascade を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!