我在'文件'上尝试了级联删除保持我的“扩张”的实体。实体从删除。但这不起作用。
错误:
无法删除或更新父行:外键约束失败(zioo
。files
,CONSTRAINT FK_6354059F395DB7B
FOREIGN KEY(expense_id
)参考expenses
(id
))
文件实体代码:
/**
* @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;
如果删除广告,则也应删除与其关联的文件。
答案 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;