5

我设置了一个 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');
    });
}

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

[Illuminate\Database\QueryException]
SQLSTATE[HY000]:一般错误:1005 无法创建表 'blog.dev.#sql-3bb_2d'(errno:150)(SQL:alter tableposts添加约束posts_user_id_foreign 外键(user_id)引用usersid))

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

从谷歌我了解到这个错误可能是由两列定义不同引起的,但这里似乎不是这种情况。

4

3 回答 3

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');
    });
}
于 2014-03-02T02:21:16.657 回答
0
public function up()
{
    Schema::table('posts', function(Blueprint $table)
    {
        $table->integer('user_id')->nullable()->after('id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users');
    });
}
于 2021-01-27T13:05:24.223 回答
0

我解决了

Schema::disableForeignKeyConstraints();

在第一次迁移之前和

Schema::enableForeignKeyConstraints();

在上次迁移中

截屏

于 2021-03-03T09:36:02.283 回答