SQLSTATE [HY000]:常规错误:1215无法添加外键约束Laravel 5.8

时间:2019-03-12 05:47:19

标签: laravel foreign-keys laravel-migrations

我正在尝试使用Laravel 5.8为“用户”表创建外键。

Laravel 5.8自动生成的迁移表如下,

public function up()
    {
        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();
        });
    }

然后从我的“存储库”表中,按如下方式引用“用户”表,

        Schema::create('repositories', function (Blueprint $table) {
            $table->string('id', 8)->primary();
            $table->string('name')->nullable(false);
            $table->string('size')->nullable(false);
            $table->unsignedInteger('user_id')->nullable(false);
            $table->timestamps();
        });


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

但是我在此代码上收到“常规错误:1215无法添加外键约束”错误。有很多与此问题相关的解决方案。

General error: 1215 Cannot add foreign key constraint in laravel

Migration: Cannot add foreign key constraint in laravel

Laravel migration "Cannot add foreign key constraint" error with MySQL database

我已经尝试了上述解决方案。但是我的问题没有解决

3 个答案:

答案 0 :(得分:2)

尝试一下

Schema::create('repositories', function (Blueprint $table) {
     $table->string('id', 8)->primary();
     $table->string('name')->nullable(false);
     $table->string('size')->nullable(false);
     $table->unsignedBigInteger('user_id');
     $table->timestamps();

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

根据laravel 5.8 Foreign Key Constraints

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

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

答案 1 :(得分:0)

可能是因为user_id列与id列不匹配。

user_id必须为bigInteger类型,并且也要建立索引。

参考:Setting a foreign key bigInteger to bigIncrements in Laravel 5.4

答案 2 :(得分:0)

从Laravel 5.8开始,使用bigIncrements代替主键的增量。如果将bigIncrements用作主键,则必须将user_id字段声明为bigInteger而不是integer。这样,主键和外键的字段将共享相同类型的数据,否则会出现错误