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