mysql - 错误号 : 150 "Foreign key constraint is incorrectly formed" when trying to create a foreing key

标签 mysql laravel eloquent

我有两张 table - 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]: General error: 1005 Can't create table logos.#sql-3da4_79a (errno: 150 "Foreign key constraint is incorrectly formed ") (SQL: alter table points add constraint points_user_id_foreign foreign key (user_id) references user (id))

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

[PDOException] SQLSTATE[HY000]:一般错误:1005 无法创建 表logos#sql-3da4_79a (errno: 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');

  });
}

运行迁移后,我遇到了与第一次相同的错误。我知道这个错误似乎是“不言自明的”,但老实说,它对我来说没有任何意义。我只是按照官方文档进行操作,我不明白为什么会出现此错误。

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

干杯!

最佳答案

首先,请确保在运行迁移之前创建用户的时间戳!

所以用户应该先迁移,然后再积分。因为您想在尝试声明外来 key 之前确保您已经拥有用户表!

那么您的foreign语句中有一个拼写错误 它应该是 users 而不是 user ,如下所示:

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

关于mysql - 错误号 : 150 "Foreign key constraint is incorrectly formed" when trying to create a foreing key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48034644/

相关文章:

mysql - 使用 dockerfile/mysql mysqld_safe mysqld 来自pid文件错误

mysql sum 在流程图中输出

mysql - CONCAT(MySql 存储过程)内的输出参数

php - 在 laravel 中上传文件

model - Laravel 4多对多关系无法正常工作,找不到数据透视表

php - Laravel 中的多提供商关系用户表

php - 单击提交表单后找不到页面/对象

php - 拉维尔 5.3 : Use auth/middleware on custom error page

javascript - 如何获取datatables中数据的 'id'来显示update form中的数据?

php - Laravel 多对多从另一个表获取数据