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

Joh*_*ean 5 php mysql foreign-keys laravel laravel-eloquent

我有一个Laravel应用程序设置,我正在使用Sentry 2进行用户身份验证.我有一个名为Post默认哨兵User表的模型.我想让一个用户有很多帖子,一个帖子属于一个用户.为了在我的数据库模式中反映这一点,我需要在posts和之间创建一个外键约束users.

我写的迁移如下:

public function up()
{
    Schema::table('posts', function(Blueprint $table)
    {
        $table->integer('user_id')->after('id')->nullable();
        $table->foreign('user_id')->references('id')->on('users');
    });
}
Run Code Online (Sandbox Code Playgroud)

运行它后php artisan migrate,我在命令提示符中收到MySQL错误:

[Illuminate\Database\QueryException]
SQLSTATE [HY000]:常规错误:1005无法创建表'blog.dev.#sql-3bb_2d'(错误号:150)(SQL:alter table postsadd constraint posts_user_id_foreign foreign key(user_id)references users(id))

起初我认为发生此错误是因为主键列的users定义与我的外键列不同user_id,但它们都定义为int(10).

从Google我了解到这个错误可能是由于两个列定义不同引起的,但是这里似乎并不是这样.

Ant*_*iro 8

外键应该已经在数据库中,因此我建议采取两个步骤.另外我建议将列user_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');
    });
}
Run Code Online (Sandbox Code Playgroud)