Php 使用Laravel迁移创建外键时出现MySQL错误

Php 使用Laravel迁移创建外键时出现MySQL错误,php,mysql,laravel,foreign-keys,laravel-eloquent,Php,Mysql,Laravel,Foreign Keys,Laravel Eloquent,我已经安装了一个Laravel应用程序,我正在使用它进行用户身份验证。我有一个名为Post的模型以及默认的sentryUser表。我想有一个用户有许多职位,一个职位属于一个用户。为了在我的数据库模式中反映这一点,我需要在帖子和用户之间创建外键约束 我编写的迁移如下所示: public function up() { Schema::table('posts', function(Blueprint $table) { $table->integer('use

我已经安装了一个Laravel应用程序,我正在使用它进行用户身份验证。我有一个名为
Post
的模型以及默认的sentry
User
表。我想有一个用户有许多职位,一个职位属于一个用户。为了在我的数据库模式中反映这一点,我需要在
帖子
用户
之间创建外键约束

我编写的迁移如下所示:

public function up()
{
    Schema::table('posts', function(Blueprint $table)
    {
        $table->integer('user_id')->after('id')->nullable();
        $table->foreign('user_id')->references('id')->on('users');
    });
}
在使用
php artisan migrate
运行它之后,我在命令提示符中得到一个MySQL错误:

[照亮\数据库\查询异常]
SQLSTATE[HY000]:一般错误: 1005无法创建表“blog.dev.#sql-3bb_2d”(错误号:150)(sql: 更改表格
posts
addconstraintposts\u user\u id\u foreign 外键(
user\u id
)引用
users
id

起初我认为发生此错误是因为
users
中的主键列的定义不同于我的外键列
user\u id
,但是它们都被定义为
int(10)


从Google我了解到,这个错误可能是由于两个列的定义不同造成的,但是这里的情况似乎不是这样。

外键应该已经在数据库中了,因此我建议采取两个步骤。我还建议将列
user\u id
设为未签名:

public function up()
{
    Schema::table('posts', function(Blueprint $table)
    {
        $table->integer('user_id')->after('id')->nullable()->unsigned();
    });

    Schema::table('posts', function(Blueprint $table)
    {
        $table->foreign('user_id')->references('id')->on('users');
    });
}
我解决了这个问题

Schema::disableForeignKeyConstraints();
在第一次迁移和

Schema::enableForeignKeyConstraints();
在上次迁移中

Schema::enableForeignKeyConstraints();