Laravel migration General error: 1215 Cannot add foreign key constraint Laravel 7.x

Laravel migration General error: 1215 Cannot add foreign key constraint Laravel 7.x

我想在我的 laravel 7.x 应用程序中使用两个模型:用户和图像:

# Users migration : 2014_10_12_000000_create_users_table.php

Schema::create('users', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });

# Images migration : 2020_03_27_121254_create_models_images_table
Schema::create('images', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->bigInteger('user_id')->unsigned;
        $table->string('name');
        $table->timestamps();
    });

    Schema::table('images', function (Blueprint $table) {
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    });

尝试迁移时我收到以下错误:一般错误:1215 无法添加外键约束 (SQL: alter table images 添加约束 images_user_id_foreign 外键(user_id) 在删除级联时引用 users (id)

我已经搜索了 google 没有成功,有人可以帮助我吗?

谢谢

您在 unsiged()

中缺少括号

根据Laravel Documentation

->unsigned() Set INTEGER columns as UNSIGNED (MySQL)

改变

 $table->bigInteger('user_id')->unsigned;

$table->bigInteger('user_id')->unsigned();

问题

您没有正确设置 unsigned

解决方案

替换:

$table->bigInteger('user_id')->unsigned;

作者:

$table->bigInteger('user_id')->unsigned();

说明

由于user_id不是无符号的,定义与usersid不匹配table这意味着你不能设置外键。

之前 Laravel 7.x

你也可以这样做:

$table->unsignedBigInteger('user_id');

Laravel 7.x

从 Laravel 7 开始,您可以在 users 迁移中这样做:

Schema::table('users', function (Blueprint $table) {
    $table->id();
    // ...
});

并且在您的 images 迁移中:

Schema::table('users', function (Blueprint $table) {
    // ...
    $table->foreignId('user_id')->constrained();
});

您可以在此处找到更多信息:https://laravel.com/docs/7.x/migrations#foreign-key-constraints