一方向の 1 対多の関連付けを含むエンティティを削除しようとすると、外部制約違反が発生します。次の単純なクラスがあります。
class Dealer{
/**
* @ManyToMany(targetEntity="Car", cascade={"persist", "remove"})
* @JoinTable(name="dealer_cars",
* joinColumns={@JoinColumn(name="dealer_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="car_id", referencedColumnName="id",
unique=true)}
* )
**/
protected cars;
}
このCar
場合、オブジェクトはその所有者との関係を含むべきではありません (したがって、一方向の関係)。車への関連付けを含むオブジェクトを削除しようとするとDealer
、次の制約違反が発生します。
Cannot delete or update a parent row: a foreign key constraint fails
(`application`.`dealer_cars`, CONSTRAINT `FK_E1BCEEEBC3C6F69F`
FOREIGN KEY (`car_id`) REFERENCES `car` (`id`))'
データベース テーブルからディーラーの行を手動で削除しようとすると、同じメッセージが表示されますが、cascade="remove" を使用する Doctrine がこれを処理してくれると思いました。
関連付けを双方向の関連付けに変更すると、機能します。これが一方向の関連付けで機能しないのはなぜですか?