Laravel迁移失败,并显示SQLSTATE [HY000]:常规错误:1215

时间:2020-01-28 11:52:34

标签: laravel-5 laravel-migrations

我正在尝试使用laravel添加迁移。这是mi迁移文件。

public function up() {
    Schema::create('sl_categories', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('title')->nullable();
        $table->integer('user_id')->unsigned()->nullable();
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        $table->softDeletes();
        $table->timestamps();
    });

    Schema::create('sl_images', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('image')->nullable();
        $table->integer('sl_category_id')->unsigned()->nullable();
        $table->integer('display_order')->nullable();
        $table->softDeletes();
        $table->timestamps();
    });

    Schema::table('sl_images', function(Blueprint $table) {
        $table->foreign('sl_category_id')->references('id')->on('sl_categories')->onDelete('cascade');
    });
}

public function down() {
    Schema::dropIfExists('sl_images');
    Schema::dropIfExists('sl_categories');
}

但是不幸的是,我遇到了这个错误。

Illuminate \ Database \ QueryException:SQLSTATE [HY000]:常规错误: 1215无法添加外键约束(SQL:更改表sl_images 添加约束sl_images_sl_category_id_foreign外键 (sl_category_id)在删除时引用了sl_categoriesid) 级联)

1 个答案:

答案 0 :(得分:0)

最后我找到了答案。问题是 InnoDB不允许在列引用不匹配的列类型的地方创建外键约束。如果简单地说,

这是一个大整数

$table->bigIncrements('id'); 

这是一个简单的整数。

 $table->integer('sl_category_id')->unsigned()->nullable();

因此我们必须将后面的行更改为 bigInteger

$table->bigInteger('sl_category_id')->unsigned()->nullable();

我正在添加此答案,以防其他人找到它。