2

Symfony 2.0.15 と組み合わせて Doctrine2.2.2 を使用しています。たとえば、クラス テーブルの継承を使用すると、次のようになります。

/**
 * @Entity
 * @InheritanceType("JOINED")
 * @DiscriminatorColumn(name="discr", type="string")
 * @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
 */

これにより、子エンティティ/テーブル (この場合は従業員) に外部キー カスケード削除制約が作成されます。これに関するDoctrineのドキュメントには、次のような重要な黄色のボックスが含まれています。

SchemaTool を使用して必要な SQL を生成しない場合、クラス テーブルの継承を削除すると、すべてのデータベース実装で外部キー プロパティ ON DELETE CASCADE が使用されることを知っておく必要があります。これを自分で実装しないと、データベース内でデッド行が発生します。

これは私には意味がありません。これは、SchemaTool を使用しない場合、Doctrine が外部キー カスケード削除制約を作成するということですか? SchemaTool を使用した場合、Doctrine は代わりに組み込みのカスケード機能を使用しますか?

4

1 に答える 1

2

つまり、SchemaTool を使用して SQL を生成すると、適切な ON DELETE CASCADE 部分も外部キー制約に追加されるということです。

ALTER TABLE Employee ADD CONSTRAINT FK_55D6C234BF396750 
    FOREIGN KEY (id) REFERENCES Parent(id) ON DELETE CASCADE;

SchemaTool を使用しない場合は、外部キー制約に ON DELETE CASCADE 部分があることを確認する必要があります。そうしないと、Employee テーブルから行を削除すると、親テーブルに孤立した行ができてしまいます。

于 2012-06-08T02:19:39.350 に答える