1

A テーブルから行を削除する必要があります。制約が失敗したことを意味する 1451 エラーが発生します。しかし、この関係を見つけようとすると、何も出てきません。

mysql> delete from A where id=961;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key 
    constraint fails (`xxx`.`B`, CONSTRAINT `FK_D273C62CBE4E457A` FOREIGN KEY 
    (`agencementDimension_id`) REFERENCES `A` (`id`))
mysql> select * from B where agencementDimension_id=961;
Empty set (0.00 sec)

制約は Doctrine + Symfony 2 によって生成されました。「カスケード削除」を追加し、スキーマを更新しましたが、「データベース スキーマはマッピング ファイルと同期しています」という変更はありません。

4

3 に答える 3

0

Symfony 2 と Doctrine 2 を使用して、 JoinColumn onDelete プロパティのおかげで ON DELETE CASCADE を制約に追加しました。

 * @ORM\JoinColumn(name="agencementDimension_id", referencedColumnName="id", onDelete="CASCADE")

これにより、MySQL エラー メッセージが次のように変更されました。

mysql> delete from A where id=961;
ERROR 1451 (23000): Cannot delete or update a parent row: 
a foreign key constraint fails (`xxx`.`C`, CONSTRAINT `FK_BF92805FD55A3663` 
FOREIGN (`agencementVersionDimension_id`) REFERENCES `B` (`id`))

B と C の間に 2 番目の関係がありました。MySQL が最初からそれを教えてくれなかった理由がわかりません。とにかく、私は C から行を削除することができたので、 A から行を削除することができました!

于 2016-05-30T12:15:37.207 に答える