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