我有2个实体链接在一起PICTURE&lt ;-( OneToMany) - >注意(见下面的课程详情)。当我试图删除图片记录时,我收到了来自Symfony的以下消息
执行' DELETE FROM Picture WHERE id =时发生异常 ?' with params [118]:SQLSTATE [23000]:完整性约束违规: 1451无法删除或更新父行:外键约束 失败(
symfony
。note
,CONSTRAINTFK_6F8F552A8671F084
FOREIGN KEY (picture_id
)参考Picture
(id
))
我发现它很奇怪,因为如果note.author_id与当前用户相同,那么我可以删除图片(以及与图片相关的注释)而没有任何问题。
这里有我的班级图片和注释的一些细节:
Class Picture
{
/**
* @ORM\OneToMany(targetEntity="XXX\XXXBundle\Entity\Note", mappedBy="picture", cascade={"persist", "remove"})
* @ORM\JoinColumn(name="note_id", referencedColumnName="picture_id", onDelete="CASCADE")
**/
private $notes;
}
Class Note
{
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="XXX\XXXBundle\Entity\Picture", inversedBy="notes")
**/
private $picture;
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Sdz\UserBundle\Entity\User", cascade={"persist"})
*/
private $user;
}
这是我的控制器删除图片。 FYI图片是我的表单中的一个集合。我将选项 allow_delete 设置为true
foreach($pictures as $picture) // $pictures is the initial list of picture
{
if(false === $data_form->getPictures()->contains($picture))
{
$em->remove($picture);
}
}
答案 0 :(得分:0)
您对数据库有约束,阻止您进行级联删除。我建议使用phpMyAdmin工具(mysql命令行用于检查约束会很糟糕):打开两个表结构选项卡,进入关系视图,这里检查约束是如何设置的。
您可能在doctrine映射和内部数据库中设置了不同的约束,并且它可能正常工作,直到您尝试对数据库执行操作,这与数据库约束发生冲突,如此处。