问题描述
你好,
我有一个代表文件夹的表,引用了父文件夹的“编号”(!= 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();
[...]
});
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
解决方法
我尝试重新阅读文档并进行一些修复,但仍然遇到问题。
如果某人的解决方案不包括做数据透视表,那么我很感兴趣!