无法删除或更新父行:Laravel

Posted

技术标签:

【中文标题】无法删除或更新父行:Laravel【英文标题】:Cannot delete or update a parent row: Laravel 【发布时间】:2020-01-10 21:44:31 【问题描述】:

我想删除category 表中的一条记录,其中它还将删除具有foreign keyforeign keysubcategory 记录。我该怎么做?

另外,解释一下为什么会发生这种情况会有所帮助。谢谢!

控制器

public function destroy(Category $category)

    // return $category;
    Category::where('id', $category->id)->delete();
    Subcategory::where('category_id', $category->id)->delete();
    return back();

类别迁移

Schema::create('categories', function (Blueprint $table) 
            $table->increments('id');
            $table->string('name');
            $table->timestamps();
        );

子类别管理

Schema::create('subcategories', function (Blueprint $table) 
        $table->bigIncrements('id');
        $table->integer('category_id')->unsigned();
        $table->string('subcatname');
        $table->string('name');
        $table->timestamps();

        $table->foreign('category_id')->references('id')->on('categories');
    );

【问题讨论】:

【参考方案1】:

这很简单,因为外键中有默认的delete: Restrict option。 1.外键添加删除级联选项。当您删除类别记录时,此选项将自动从子类别表中删除任何关联记录。 修改后的 fk 语句如下:

 ADD CONSTRAINT `category_subcategory_foreign` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`) ON DELETE CASCADE;

或者你可以通过

Laravel 还支持创建外键约束,用于在数据库级别强制引用完整性。例如,让我们在 posts 表上定义一个 user_id 列,它引用 users 表上的 id 列:

Schema::table('posts', function (Blueprint $table) 
$table->unsignedBigInteger('user_id');

$table->foreign('user_id')->references('id')->on('users');

);

您还可以为约束的“on delete”和“on update”属性指定所需的操作:

$table->foreign('user_id')
  ->references('id')->on('users')
  ->onDelete('cascade');

【讨论】:

【参考方案2】:

您需要onDelete 方法。来自Docs

$table->foreign('category_id')
      ->references('id')->on('categories')
      ->onDelete('cascade');

【讨论】:

以上是关于无法删除或更新父行:Laravel的主要内容,如果未能解决你的问题,请参考以下文章

Laravel SQLSTATE[23000] 无法删除或更新父行:外键约束失败

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

无法删除或更新父行 - Java

如何解决这个问题 - 无法删除或更新父行:外键约束失败

无法删除或更新父行:外键约束失败

spring boot:无法删除或更新父行:外键约束失败