Php 无法使用Symfony删除记录(OneToMany)
我有两个实体链接在一起的图片说明(见下面的类详细信息)。当我试图删除图片记录时,我从Symfony收到以下消息 执行“从id为的图片中删除”时发生异常= 带参数[118]:SQLSTATE[23000]:完整性约束冲突: 1451无法删除或更新父行:外键约束 失败(Php 无法使用Symfony删除记录(OneToMany),php,symfony,doctrine,cascading-deletes,Php,Symfony,Doctrine,Cascading Deletes,我有两个实体链接在一起的图片说明(见下面的类详细信息)。当我试图删除图片记录时,我从Symfony收到以下消息 执行“从id为的图片中删除”时发生异常= 带参数[118]:SQLSTATE[23000]:完整性约束冲突: 1451无法删除或更新父行:外键约束 失败(symfony注意,约束FK_6F8F552A8671F084外键 (picture\u id)参考资料picture(id) 我觉得很奇怪,因为如果note.author\u id与当前用户相同,那么我可以毫无问题地删除图片(以及与
symfony
注意
,约束FK_6F8F552A8671F084
外键
(picture\u id
)参考资料picture
(id
)
我觉得很奇怪,因为如果note.author\u id与当前用户相同,那么我可以毫无问题地删除图片(以及与图片相关的注释)。
下面是我的课堂照片和笔记的一些细节:
类图片
{
/**
*@ORM\OneToMany(targetEntity=“XXX\XXXBundle\Entity\Note”,mappedBy=“picture”,cascade={“persist”,“remove”})
*@ORM\JoinColumn(name=“note\u id”,referencedColumnName=“picture\u id”,onDelete=“CASCADE”)
**/
私人美元钞票;
}
课堂笔记
{
/**
*@ORM\Id
*@ORM\manytone(targetEntity=“XXX\XXXBundle\Entity\Picture”,inversedBy=“notes”)
**/
私人$picture;
/**
*@ORM\Id
*@ORM\ManyToOne(targetEntity=“Sdz\UserBundle\Entity\User”,cascade={“persist”})
*/
私人用户;
}
这里是我的控制器删除图片。仅供参考图片是我表格中的一个集合。我将选项allow_delete设置为true
您对数据库有一些限制,这些限制阻止您进行级联删除。我建议使用phpMyAdmin工具(mysql命令行很难用于检查约束):打开两个表的结构选项卡,进入关系视图,在这里检查约束是如何设置的
您可能在条令映射和数据库中设置了不同的约束,在您尝试对数据库执行与数据库约束冲突的操作之前,它可能会正常工作,如下图所示。您可以添加代码以了解如何尝试删除这些实体吗?好的,我刚刚将其添加到我的问题中(在底部)。真正的优势在于,除非注释不是由当前用户发布的,否则它可以正常工作…好的,FIsher,在我使用phpMyAdmin工具之前,当注释作者是当前用户时,什么样的约束使数据库可以正常工作以删除图片。。。当便笺作者不是当前用户时不起作用?这取决于删除图片时希望发生什么。如果您想删除相关的注释,请进行约束级联。是的,我想删除与图片相关的注释。这就是为什么我在课堂图片的评论中设置onDelete=“CASCADE”。(除非与图片相关联的注释具有与当前用户不同的author\u id,这很奇怪),否则它工作正常)如果note.author.id=当前用户id,则我没有触发的symfony异常。然后我不知道。问题似乎更深。实际上,错误消息直截了当地说:约束允许删除,我将从数据库中删除所有约束,然后重试。好的,我如何从数据库中删除约束?顺便说一句,我没有关系视图按钮(即使将存储引擎设置为“innoDB”)
foreach($pictures as $picture) // $pictures is the initial list of picture
{
if(false === $data_form->getPictures()->contains($picture))
{
$em->remove($picture);
}
}