我有两张 table - Users
和 Points
。在 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 tablepoints
add constraintpoints_user_id_foreign
foreign key (user_id
) referencesuser
(id
))[Doctrine\DBAL\Driver\PDOException] SQLSTATE[HY000]:常规 错误:1005 无法创建表
logos
。#sql-3da4_79a
(错误号:150 “外键约束格式不正确”)[PDOException] SQLSTATE[HY000]:一般错误:1005 无法创建 表
block 引用>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/