Fre*_*old 8 php orm doctrine-orm
我在尝试删除实体时遇到外部约束违规,包含单向一对多关联.我有以下简单的类:
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;
}
Run Code Online (Sandbox Code Playgroud)
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`))'
Run Code Online (Sandbox Code Playgroud)
如果我试图从数据库表中手动删除经销商行,我会得到相同的消息,但我认为Doctrine,使用cascade ="remove",将为我处理这个问题.
如果我将关联更改为双向关联,则可以正常工作.为什么这不适用于单向关联?
Nic*_*ich 14
在Doctrine中使用Database level onDelete选项
@ORM\JoinColumn(name="dealer_id", referencedColumnName="id", onDelete="SET NULL")
Run Code Online (Sandbox Code Playgroud)
从这里解释:
当父行消失时,SET NULL将列值设置为NULL.
RESTRICT导致父行的DELETE尝试失败.
... 在抱怨它不起作用之前更新您的数据库架构:-)
app/console doctrine:schema:update --force
Run Code Online (Sandbox Code Playgroud)
如果因外键错误而无法正常工作(按此顺序):
| 归档时间: |
|
| 查看次数: |
6598 次 |
| 最近记录: |