Laravel 关于删除完整性约束违规:1451 无法删除或更新父行:外键约束失败

Posted

技术标签:

【中文标题】Laravel 关于删除完整性约束违规:1451 无法删除或更新父行:外键约束失败【英文标题】:Laravel On delete Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails 【发布时间】:2020-08-10 11:09:10 【问题描述】:

所以我试图创建一个文件夹可以有子文件夹但在删除父文件夹时出现 1451 错误的自我关系

以下是我的 Laravel 迁移代码:

$table->foreign('f_folder_id')->references('id')->on('folders');

如果我没有以正确的方式做事,请告诉我应该使用什么方法。提前谢谢。

(我也在某处读过外键约束的设置,但这是个坏主意,所以我在寻找建议)

【问题讨论】:

【参考方案1】:

您已经为您的子表添加了一个外键,因此当您尝试删除父行时,它会因为另一个表上的相关子行而失败。 所以你有两个选择:

1 - 在删除父级本身之前以编程方式删除所有子级

2 - 通过强制 ondelete 级联规则让 RDBMS 代表您执行子项删除。

$table->foreign('f_folder_id')
            ->references('id')
            ->on('folders')
            ->onDelete('cascade');

修改后,迁移。

顺便说一句,选项 2 既快捷又简单。

【讨论】:

无法更新父行怎么办?我已经完全像这样定义了我的迁移,我可以很好地删除,但不能以某种方式编辑我的父行..

以上是关于Laravel 关于删除完整性约束违规:1451 无法删除或更新父行:外键约束失败的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 外键约束报错

SQLSTATE [23000]:完整性约束违规:1048 laravel 5.7

完整性约束违规:1452 无法添加或更新子行:外键约束失败(Laravel 应用程序)

SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败 - Laravel

SQLSTATE[23000]:Laravel 中的完整性约束违规

:完整性约束违规:1452 无法添加或更新子行:laravel 迁移中的外键约束失败