【问题标题】:Cannot delete a records (OneToMany) with Symfony无法使用 Symfony 删除记录(OneToMany)
【发布时间】:2015-06-24 09:20:36
【问题描述】:

我有 2 个实体链接在一起图片 注意(请参阅下面的课程详细信息)。当我尝试删除图片记录时,我从 Symfony 收到以下消息

执行 'DELETE FROM Picture WHERE id = 时发生异常 ?带参数 [118]:SQLSTATE[23000]:违反完整性约束: 1451 无法删除或更新父行:外键约束 失败(symfony.note,约束FK_6F8F552A8671F084外键 (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;
}

在这里我的控制器删除图片。仅供参考图片是我形式的集合。我将选项 allow_delete 设置为 true

    foreach($pictures as $picture) // $pictures is the initial list of picture
    {  
      if(false === $data_form->getPictures()->contains($picture))
      {
          $em->remove($picture);
      }
    }

【问题讨论】:

  • 您能否添加代码以尝试删除这些实体?
  • 好的,我刚刚将它添加到我的问题中(在底部)。真正强大的是它可以正常工作,除非当前用户未发布该注释...

标签: php symfony doctrine cascading-deletes


【解决方案1】:

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

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

【讨论】:

  • 好的FIsher,在我使用phpMyAdmin工具之前,当笔记作者是当前用户时,什么样的约束使数据库可以正常删除图片......当笔记作者不是当前用户?
  • 这取决于您在删除图片时希望发生什么。如果您还希望删除关联的注释,请进行约束 CASCADE。
  • 是的,我希望删除与图片相关的注释。这就是为什么我在图片类的 cmets 中设置 onDelete="CASCADE" 的原因。 (除非与图片关联的注释具有与当前用户不同的 author_id,这很奇怪,否则它可以正常工作)如果 note.author.id = current_user.id 那么我没有触发的 symfony 异常。
  • 那我就不知道了。似乎问题在更深的地方。实际上错误消息直截了当地说:约束允许删除,我会从数据库中删除所有这些,然后尝试。
  • 好的,如何从数据库中删除约束?顺便说一句,我没有关系视图按钮(即使将存储引擎设置为“innoDB”)
猜你喜欢
  • 1970-01-01
  • 2020-10-25
  • 2012-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-04
  • 1970-01-01
相关资源
最近更新 更多