繁体   English   中英

Doctrine2 - 无法删除具有单向oneToMany关系的实体

[英]Doctrine2 - Cannot delete an entity with a unidirectional oneToMany relation

我在尝试删除实体时遇到外部约束违规,包含单向一对多关联。 我有以下简单的类:

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`))'

如果我试图从数据库表中手动删除经销商行,我会得到相同的消息,但我认为Doctrine,使用cascade =“remove”,将为我处理这个问题。

如果我将关联更改为双向关联,则可以正常工作。 为什么这不适用于单向关联?

在Doctrine中使用Database level onDelete选项

@ORM\JoinColumn(name="dealer_id", referencedColumnName="id",  onDelete="SET NULL")

这里解释:

  • 当父级更改时,CASCADE将传播更改。 (如果删除行,则引用该行的约束表中的行也将被删除,等等)
  • 当父行消失时,SET NULL将列值设置为NULL。

  • RESTRICT导致父行的尝试DELETE失败。


...在抱怨它不起作用之前更新您的数据库架构:-)

app/console doctrine:schema:update --force

如果因外键错误而无法正常工作(按此顺序):

  • app / console doctrine:database:drop
  • app / console doctrine:database:create
  • app / console doctrine:schema:update --force
  • (可选:app / console doctrine:fixtures:load)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM