错误:150“尝试创建外键时”错误地形成了“外键约束”

问题描述 投票:0回答:1

我有两张桌子 - UsersPoints。在Points中我想要以下列:id,points,user_id(外键)。

出于此目的,我按以下顺序执行以下操作:

创建我的迁移看起来像这样:

public function up()
    {
        Schema::create('points', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('points')->unsigned();
            $table->integer('user_id')->unsigned();
            $table->foreign('user_id')->references('id')->on('user');
        });
    }

运行迁移后,我收到以下错误:

[Illuminate \ Database \ QueryException] SQLSTATE [HY000]:一般错误:1005无法创建表logos.#sql-3da4_79a(错误:150“外键约束形成错误”)(SQL:alter table points add constraint points_user_id_foreign foreign key(user_id) )参考userid))

[Doctrine \ DBAL \ Driver \ PDOException] SQLSTATE [HY000]:常规错误:1005无法创建表logos.#sql-3da4_79a(错误:150“外键约束形成错误”)

[PDOException] SQLSTATE [HY000]:常规错误:1005无法创建表logos.#sql-3da4_79a(错误:150“外键约束形成错误”)

之后,我将这种关系添加到users

 public function points()
    {
        return $this->hasOne('App\Points');
    }

这与points的关系:

 public function user()
    {
        return $this->hasOne('App\User', 'user_id');
    }

然后我添加了另一个仅用于外键的迁移(因为上一次迁移创建了表及其列,尽管有错误):

   public function up()
{
     Schema::table('points', function (Blueprint $table) {

         $table->foreign('user_id')->references('id')->on('user');

  });
}

运行迁移后,我得到的错误与第一次相同。我知道错误似乎是“自我解释”,但说实话,这对我没有任何意义。我只是遵循官方文档,我不明白为什么我会收到此错误。

有人可以解释并帮助我排除故障吗?

干杯!

mysql laravel eloquent
1个回答
2
投票

首先,在运行users迁移之前,确保创建points的时间戳!

因此,用户应该在积分之前先迁移。因为在尝试声明foregin键之前,您想确保已经有用户表!

然后你有一个关于foreign声明的错字它应该是users而不是user如下:

$table->foreign('user_id')->references('id')->on('users');
© www.soinside.com 2019 - 2024. All rights reserved.