无法添加外键约束-Laravel迁移错误

时间:2019-09-19 11:39:17

标签: mysql laravel laravel-5

我有多个迁移,但是我认为与这个问题相关的两个迁移是“工作”和“会话”迁移。

工作迁移

    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)引用jobid))

数据库:MySQL

我不明白这里是什么问题。即使在当前的Laravel项目中,这种方法也一直对我有用。

2 个答案:

答案 0 :(得分:1)

您必须确保作业迁移是在会话迁移之前进行的

答案 1 :(得分:1)

在处理migrationforeign key relationship(亲子)时,序列是根据迁移文件的时间戳定义的,因此请始终确保在{之前创建Parent table迁移{1}}。这很重要,因为如果父表不存在,则意味着您在Child table中引用的列不存在,在这种情况下,它将经过此类错误。

在您的情况下,更改时间戳即可解决问题。