【问题标题】:Cannot add foreign key constraint - Laravel Migration Error无法添加外键约束 - Laravel 迁移错误
【发布时间】: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 项目中也是如此。

【问题讨论】:

  • 迁移的顺序是否正确?
  • 不确定你的意思。我确实先创建了会话迁移,然后是作业迁移。会不会是这个问题?
  • 这就是问题所在。您尝试为不存在的表创建外键。尝试通过更改日期来重命名迁移文件。
  • 好的,是的。非常感谢。

标签: mysql laravel laravel-5


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 是的,谢谢。只需将时间戳增加到以后的日期即可。
    猜你喜欢
    • 1970-01-01
    • 2019-03-24
    • 2017-03-27
    • 2021-03-29
    • 2021-08-30
    • 2021-06-18
    • 2020-09-21
    • 2020-03-12
    相关资源
    最近更新 更多