当前位置: 首页 > 知识库问答 >
问题:

Symfony完整性约束冲突

林承悦
2023-03-14

无法删除或更新父行:外键约束失败(zio.files,constraintfk_6354059f395db7b外键(expense_id)引用expensent(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;

共有1个答案

萧繁
2023-03-14

使用cascade={“remove”},如果实体为其他实体所有,则不会删除该实体。这个问题似乎是由条令引起的,因为Expose实体与file实体有两个关系,这导致条令“认为”您的file实体为其他实体所有,所以在尝试删除Expose之前,没有向数据库发送一个delete。

因此,当它试图删除扩展时,会抛出此错误。

要测试它,请删除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;

条令删除关系选项

 类似资料:
  • 我的迁移: 但会导致查询异常:( SQLSTATE[23000]:完整性约束冲突:密钥“users\u identifier\u unique”的1062重复条目“76561198364059468”

  • 主要内容:1. 域限制,2. 实体完整性约束,3. 参照完整性约束,4. 键限制(约束)完整性约束是一组规则,它用于保持信息质量。 完整性约束确保必须以不影响数据完整性的方式执行数据插入,更新和其他过程。 因此,完整性约束用于防止对数据库的意外损坏。 完整性约束的类型 1. 域限制 域约束可以定义为属性的有效值集的定义。 域的数据类型包括字符串,字符,整数,时间,日期,货币等。属性的值必须在相应的域中可用。 示例 - 2. 实体完整性约束 实体完整性约束表明主键值不能为空()。 这是

  • 我提交一个表单与AJAX和在网络我得到这个错误。 我正在使用Laravel5.6和迁移。这是此表的迁移。 这是我的控制器的功能。 我的文件上传成功,数据也被插入到数据库中,但我仍然收到这个错误。这不影响我,但想解决它吗?

  • 我是拉雷维尔的新手,这是我在拉雷维尔的第一个项目。像往常一样,首先我正在开发一个完整的用户身份验证系统。我可以注册一个用户,可以发送用户验证电子邮件,点击该链接后,我可以激活一个新的用户帐户,可以登录和注销。但在那之后,每当我尝试注册另一个新用户并单击验证链接后,我都会遇到一个异常, 现在这是我的路线。php, 这是我的账户管理员 这是我的创建用户迁移文件 这是我的用户。php 现在有什么问题?

  • 我正在尝试将值插入到我的comments表中,但我得到了一个错误。它的意思是我不能添加或更新子行,我不知道这意味着什么。 SQLSTATE[23000]:完整性约束冲突:1452无法添加或更新子行:外键约束失败(.,约束外键()引用()删除时不执行更新时不执行操作)

  • 这是用户迁移: 更新:这是我的插入函数: 当我的数据库中有一个melli(如1234567890)并且我尝试再次写入1234567890时,就会发生此错误,因为melli字段是唯一的。