我有两张桌子 - 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]:一般错误:1005无法创建表
logos
.#sql-3da4_79a
(错误:150“外键约束形成错误”)(SQL:alter tablepoints
add constraintpoints_user_id_foreign
foreign key(user_id
) )参考user
(id
))[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');
});
}
运行迁移后,我得到的错误与第一次相同。我知道错误似乎是“自我解释”,但说实话,这对我没有任何意义。我只是遵循官方文档,我不明白为什么我会收到此错误。
有人可以解释并帮助我排除故障吗?
干杯!
首先,在运行users
迁移之前,确保创建points
的时间戳!
因此,用户应该在积分之前先迁移。因为在尝试声明foregin键之前,您想确保已经有用户表!
然后你有一个关于foreign
声明的错字它应该是users
而不是user
如下:
$table->foreign('user_id')->references('id')->on('users');