Laravel 7.x-自反关系-即使有适当的约束,也无法删除或更新父行

问题描述

你好

我有一个代表文件夹的表,引用了父文件夹的“编号”(!= ID)。这是一个名为“文件夹”的表上的自反关系。

ID为1、2、3、4 ...,并且不能进行编辑。

“ folder_number”列包含“ 2048759”,“ 5789516”之类的值,并且可以由管理员进行编辑。

示例: 文件夹可以有一个文件夹。 (一) 文件夹可以具有子文件夹(0或一个或多个) 文件夹的“ parent_folder_number”列中具有其父文件夹的编号。

我要

用户管理员)更新文件夹上的“ folder_number”时,我希望所有子文件夹都更新其“ parent_folder_number”字段。

但是(t):

更新父行时,我遇到了FK约束问题。

所以这是我创建表的迁移:

Schema::create('folders',function (Blueprint $table)
{
[...]
    $table->id();
    $table->bigInteger('folder_number')
          ->unsigned()
          ->index()
          ->onDelete('SET NULL')
          ->onUpdate('CASCADE');
    $table->bigInteger('parent_folder_number')
          ->unsigned()
          ->nullable();
[...]
});

在另一个迁移中,我为FK添加了以下约束:

Schema::table('folders',function(Blueprint $table)
{
[...]
    $table->foreign('parent_folder_number')
         ->onDelete('SET NULL')
         ->onUpdate('CASCADE')
         ->references('folder_number')->on('folders');
[...]
});

一切正常,但是当我将父文件添加文件夹然后想要更改该父文件夹的编号时,会发生这种情况:

sqlSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`db`.`folders`,CONSTRAINT `folders_parent_folder_number_foreign` FOREIGN KEY (`parent_folder_number`) REFERENCES `folders` (`number`) ON DELETE SET NULL ON UPDATE CASCADE) (sql: update `folders` set `number` = 1 where `id` = 9)

有人可以帮我弄清楚吗?谢谢:D

解决方法

我尝试重新阅读文档并进行一些修复,但仍然遇到问题。

如果某人的解决方案不包括做数据透视表,那么我很感兴趣!