Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel:外键格式不正确_Php_Laravel_Database Migration - Fatal编程技术网

Php Laravel:外键格式不正确

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

因此,我正忙于进行此迁移,经过大量研究,他仍然向我发送以下错误消息:

SQLSTATE[HY000]:一般错误:1005无法创建表
dev
绑定
(错误号:150“外键约束格式不正确”)(SQL:alter table
bindings
添加约束
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');
    });