因此,我正忙于进行此迁移并进行了大量研究,他仍然给我以下错误消息:
SQLSTATE [HY000]:常规错误:1005无法创建表
dev
。bindings
(错误号:150“外键约束格式不正确”)(SQL:更改表{{1} }在更新级联上的删除级联上添加约束bindings
外键(bindings_users_id_foreign
)引用users_id
(users
)
代码:
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');
});
据我所知,这应该正确地构成一个外键。任何帮助都将得到帮助!
答案 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
命令。