Php Laravel:外键格式不正确
因此,我正忙于进行此迁移,经过大量研究,他仍然向我发送以下错误消息: SQLSTATE[HY000]:一般错误:1005无法创建表Php Laravel:外键格式不正确,php,laravel,database-migration,Php,Laravel,Database Migration,因此,我正忙于进行此迁移,经过大量研究,他仍然向我发送以下错误消息: SQLSTATE[HY000]:一般错误:1005无法创建表dev绑定(错误号:150“外键约束格式不正确”)(SQL:alter tablebindings添加约束bindings\u users\u id\u Foreign外键(users\u id)引用users(id)关于删除级联(关于更新级联) 代码: 版本: PHP: v7.3 Laravel: v5.8.4 MariaDB: v10.3.13 Homestead
dev
绑定(错误号:150“外键约束格式不正确”)(SQL:alter tablebindings
添加约束bindings\u users\u id\u Foreign
外键(users\u id
)引用users
(id
)关于删除级联(关于更新级联)
代码:
版本:
PHP: v7.3
Laravel: v5.8.4
MariaDB: v10.3.13
Homestead: v8.1.0
如我所知,这应该正确地形成外键。任何帮助都将被感激 更新:正如其他答案所述,我没有注意到,您需要先创建users表,然后才能创建外键
执行外键时,两个字段需要具有相同的属性。因此,在您的情况下,如果您使用bigIncrements,那么您的用户id需要是一个无符号的大整数
// 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\u id
,这将使在Laravel
中处理关系更加容易。在迁移过程中,将父表迁移置于子表之上
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
命令。用户表中id
列的数据类型是什么?@Script47这是biginrement
类型,也尝试了Increment
,但没有任何帮助:(|编辑:将其添加到主帖子中并使用$table->biginger('user|id')->unsigned()非用户\u id对需要首先创建的用户的观察是完全正确的。在实际迁移中,它必须是在之前-它可能在问题中的位置发生了变化,因为users
表是在最初询问问题之后才添加的。如果users
表在尝试添加FK之前不存在,您将d获取另一个错误。答案还使用了不一定正确的unsignedbiginger()
。更高版本需要biginger->unsigned()
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');
});