我有多个迁移,但是我认为与这个问题相关的两个迁移是“工作”和“会话”迁移。
工作迁移
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项目中,这种方法也一直对我有用。
答案 0 :(得分:1)
您必须确保作业迁移是在会话迁移之前进行的
答案 1 :(得分:1)
在处理migration
和foreign key relationship
(亲子)时,序列是根据迁移文件的时间戳定义的,因此请始终确保在{之前创建Parent table
迁移{1}}。这很重要,因为如果父表不存在,则意味着您在Child table
中引用的列不存在,在这种情况下,它将经过此类错误。
在您的情况下,更改时间戳即可解决问题。