ホームページ > バックエンド開発 > PHPチュートリアル > Doctrine2 で「カスケード削除時」を実装するにはどうすればよいですか?

Doctrine2 で「カスケード削除時」を実装するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-03 00:19:02
オリジナル
820 人が閲覧しました

How to Implement

Doctrine2 を使用した削除カスケード実装

データベース リレーションシップの管理に Doctrine2 を利用する場合、実行時に子行を自動的に削除する必要が生じる場合があります。親行の削除。これは、「on delete cascade」オプションによって実現されます。

あなたの特定の例では、Child エンティティと Father エンティティを定義した後、「on delete cascade」オプションが作成されないという問題が発生しています。データベース内で。これは、ORM レベルのカスケード (関連付けで cascade={"remove"} として指定) を使用していることが原因であると考えられます。

ORM-Level Cascades

ORM-levelカスケードは UnitOfWork 内の削除プロセスを処理し、オブジェクト構造には影響しますが、データベース自体には影響しません。 ORM レベルのカスケードを使用してオブジェクトを削除する場合、UnitOfWork は関連するオブジェクトを反復処理し、それらのオブジェクトも削除します。

データベース レベルのカスケード

ORM レベルとは対照的にカスケードの場合、データベース レベルのカスケードでは、関連付けの結合列に onDelete="CASCADE" を指定する必要があります。この方法では、「on delete cascade」制約をデータベースの外部キー列に追加し、親行が削除されたときに子行も自動的に削除されるようにします。

問題を修正するには、子エンティティを次のように変更します。 :

<code class="php">namespace Acme\CascadeBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="child")
 */
class Child {

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @ORM\ManyToOne(targetEntity="Father", cascade={"remove"})
     *
     * @ORM\JoinColumn(name="father_id", referencedColumnName="id", onDelete="CASCADE")
     *
     * @var father
     */
    private $father;
}</code>
ログイン後にコピー

以上がDoctrine2 で「カスケード削除時」を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート