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

时间:2017-12-30 14:03:31

标签: mysql laravel eloquent

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

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

创建I迁移,如下所示:

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添加约束points_user_id_foreign外键     (user_id)引用userid))

  
     

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

     

[PDOException] SQLSTATE [HY000]:常规错误:1005无法创建   table 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');

  });
}

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

有人可以解释并帮我解决问题吗?

干杯!

1 个答案:

答案 0 :(得分:2)

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

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

然后你在foreign声明中输了一个错字  它应该是users而不是user,如下所示:

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