Laravel:外键格式错误

时间:2019-03-13 09:12:36

标签: php laravel database-migration

因此,我正忙于进行此迁移并进行了大量研究,他仍然给我以下错误消息:

  

SQLSTATE [HY000]:常规错误:1005无法创建表devbindings(错误号:150“外键约束格式不正确”)(SQL:更改表{{1} }在更新级联上的删除级联上添加约束bindings外键(bindings_users_id_foreign)引用users_idusers

代码:

id

版本:

Schema::create('bindings', function (Blueprint $table) {
    $table->unsignedInteger('users_id');

    $table->foreign('users_id')
        ->references('id')->on('users')
        ->onDelete('cascade')
        ->onUpdate('cascade');
});

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

据我所知,这应该正确地构成一个外键。任何帮助都将得到帮助!

2 个答案:

答案 0 :(得分:3)

更新:正如其他答案所述,我没有注意到,您需要先创建users表,然后才能创建外键。

当您执行外键时,两个字段将需要具有相同的属性。因此,在您的情况下,如果您使用bigIncrements,则users_id必须是一个无符号的big int。

// User table needs to be created first
Schema::create('users', function (Blueprint $table) {
    $table->bigIncrements('id');
});

Schema::create('bindings', function (Blueprint $table) {
    $table->bigInteger('users_id')->unsigned();

    ...
});

另外,标准是将其命名为user_id,这将使在Laravel中建立关系更加容易。

答案 1 :(得分:2)

在迁移中,将父表迁移放在子表的顶部,然后放在子表上

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


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

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

然后运行php artisan migrate命令。