无法使用Symfony删除记录(OneToMany)

时间:2015-06-24 09:20:36

标签: php symfony doctrine cascading-deletes

我有2个实体链接在一起PICTURE&lt ;-( OneToMany) - >注意(见下面的课程详情)。当我试图删除图片记录时,我收到了来自Symfony的以下消息

  

执行' DELETE FROM Picture WHERE id =时发生异常   ?' with params [118]:SQLSTATE [23000]:完整性约束违规:   1451无法删除或更新父行:外键约束   失败(symfonynote,CONSTRAINT FK_6F8F552A8671F084 FOREIGN KEY   (picture_id)参考Pictureid))

我发现它很奇怪,因为如果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);
      }
    }

1 个答案:

答案 0 :(得分:0)

您对数据库有约束,阻止您进行级联删除。我建议使用phpMyAdmin工具(mysql命令行用于检查约束会很糟糕):打开两个表结构选项卡,进入关系视图,这里检查约束是如何设置的。

您可能在doctrine映射和内部数据库中设置了不同的约束,并且它可能正常工作,直到您尝试对数据库执行操作,这与数据库约束发生冲突,如此处。