Symfony完整性约束违规

时间:2018-03-19 09:38:53

标签: database symfony doctrine

我在'文件'上尝试了级联删除保持我的“扩张”的实体。实体从删除。但这不起作用。

错误:

无法删除或更新父行:外键约束失败(zioofiles,CONSTRAINT FK_6354059F395DB7B FOREIGN KEY(expense_id)参考expensesid))

文件实体代码:

 /**
 * @ORM\ManyToOne(targetEntity="Expense", inversedBy="files", cascade={"remove"})
 * @ORM\JoinColumn(name="expense_id", referencedColumnName="id")
 */
private $expense;

扩展实体代码:

 /**
 * @ORM\OneToOne(targetEntity="File", cascade={"persist"})
 * @ORM\JoinColumn(name="file_id", referencedColumnName="id")
 */
private $file = null;

/**
 * @ORM\OneToMany(targetEntity="File", mappedBy="expense", cascade={"remove"})
 */
protected $files;

如果删除广告,则也应删除与其关联的文件。

1 个答案:

答案 0 :(得分:0)

使用 cascade = {“remove”} 如果实体拥有其他内容,则不会删除该实体。这个问题似乎是由学说造成的,因为扩展实体与文件实体有2个关系,这导致学说“认为”你的文件实体是由其他东西拥有的,而不是在尝试删除之前为它发送删除数据库广阔的。

因此,当它尝试删除扩展时会抛出此错误。

要对其进行测试,请删除private $file = null;关系,并看到它会起作用。

为了解决这个问题,我建议在拥有方使用onDelete="CASCADE"

/**
 * @ORM\ManyToOne(targetEntity="Expense", inversedBy="files", cascade={"remove"})
 * @ORM\JoinColumn(name="expense_id", referencedColumnName="id", onDelete="CASCADE")
 */
private $expense;

在这种情况下,您不再需要cascade={"remove"}

/**
 * @ORM\OneToMany(targetEntity="File", mappedBy="expense")
 */
protected $files;

Doctrine delete relation options