【发布时间】:2013-05-22 18:31:22
【问题描述】:
我在尝试删除包含单向一对多关联的实体时遇到外部约束违规。我有以下简单的类:
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 会为我解决这个问题。
如果我将关联更改为双向关联,它会起作用。为什么这不适用于单向关联?
【问题讨论】:
-
单向一对多关联 ?这对我来说更像是双向多对多:D 当您更改架构时,您是否删除了数据库并重新创建,或者您在数据库中有任何固定装置/数据剩余物?
-
你想在不丢失汽车的情况下删除经销商,我说对了吗?
-
是Doctrine对单向一对多的定义。它是具有唯一约束的多对多。我想删除汽车,同时删除经销商。
-
但是我发现了问题。我需要在外键表的 car_id 列中添加一个
onDelete="cascade"属性。这显然是有道理的!感谢您的关注:)
标签: php orm doctrine-orm