首页 > 解决方案 > SQLSTATE[HY000]:一般错误:1215 无法在 laravel 8 中添加外键约束

问题描述

嗨,我正在尝试创建类别,然后创建子类别,因此如果删除类别,子类别也将在这里被删除我到目前为止所做的创建了一个名为类别的模型还创建了一个子类别模型

运行该类别的迁移

 public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('image');
            $table->string('slug');
            $table->timestamps();
        });
    }

在我的子类别迁移中,我定义了

public function up()
   {
       Schema::create('subcategories', function (Blueprint $table) {
           $table->increments('id');
           $table->unsignedBigInteger('category_id');
           $table->string('name');
           $table->string('slug');
           $table->timestamps();

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


当我尝试迁移时,我遇到了错误,指出 Illuminate\Database\QueryException

SQLSTATE [HY000]:一般错误:1215 无法添加外键约束(SQL:删除级联时更改表subcategories添加约束subcategories_category_id_foreign外键(category_id)引用categories( ))id

我的 laravel 版本是 8.40 nd sqlversion 是 5.7.24

确实改变了两个表的时间戳仍然没有工作

2021_06_09_000000_create_categories_table.php 2021_06_10_055026_create_subcategories_table.php

即使我尝试过


$table->foreignId('category_id')->constrained('categories');

标签: phpmysqllaravel

解决方案


只需使用

$table->foreignId('category_id)

代替

$table->unsignedBigInteger('category_id')
$table->foreign('category_id')->references('id')

推荐阅读