无法添加外键约束 - Laravel 迁移错误
Posted
技术标签:
【中文标题】无法添加外键约束 - Laravel 迁移错误【英文标题】:Cannot add foreign key constraint - Laravel Migration Error 【发布时间】:2020-01-20 10:32:16 【问题描述】:我有多个迁移,但我认为与这个问题相关的两个是“工作”和“会话”迁移。
工作迁移
Schema::create('job', function (Blueprint $table)
$table->bigIncrements('id');
$table->string('name');
$table->timestamps();
);
会话迁移:
Schema::create('session', function (Blueprint $table)
$table->bigIncrements('id');
$table->unsignedBigInteger('user_id');
$table->unsignedBigInteger('group_id');
$table->unsignedBigInteger('job_id');
$table->boolean('verified')->default(0);
$table->date('date');
$table->time('start_time');
$table->time('end_time');
$table->string('session_type');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users');
$table->foreign('group_id')->references('id')->on('group');
$table->foreign('job_id')->references('id')->on('job');
);
现在我进行迁移时遇到的错误是:
SQLSTATE[HY000]:一般错误:1215 无法添加外键约束 (SQL:修改表
session
添加约束session_job_id_foreign
外键 (job_id
) 引用job
(id
))
数据库:mysql
我不明白这里有什么问题。这种方法一直对我有用,即使在当前的 Laravel 项目中也是如此。
【问题讨论】:
迁移的顺序是否正确? 不确定你的意思。我确实先创建了会话迁移,然后是作业迁移。会不会是这个问题? 这就是问题所在。您尝试为不存在的表创建外键。尝试通过更改日期来重命名迁移文件。 好的,是的。非常感谢。 【参考方案1】:在处理migration
和foreign key relationship
(父子)时,根据迁移文件的时间戳定义的顺序,因此始终确保Parent table
迁移在Child table
之前创建。这很重要,因为如果父表不存在意味着您在 Child table
中引用的列不存在,在这种情况下它将出现此类错误。
在您的情况下,更改时间戳将解决问题。
【讨论】:
【参考方案2】:您必须确保作业迁移在会话迁移之前进行
【讨论】:
是的,谢谢。只需将时间戳增加到以后的日期即可。以上是关于无法添加外键约束 - Laravel 迁移错误的主要内容,如果未能解决你的问题,请参考以下文章