【问题标题】:Cannot delete or update a parent row: Laravel无法删除或更新父行: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');
    });

【问题讨论】:

    标签: laravel foreign-keys laravel-migrations


    【解决方案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');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-25
        • 2018-05-12
        • 2021-12-14
        • 2017-04-03
        • 1970-01-01
        • 2016-06-30
        • 1970-01-01
        相关资源
        最近更新 更多