使用Laravel Migration添加外键约束

时间:2017-10-20 15:55:17

标签: php mysql laravel laravel-5 database-migration

我已经启动了一个新的Laravel 5.5项目,并且在尝试向我的users表添加外键时收到以下错误:

  

常规错误:1215无法添加外键约束(SQL:alter table users添加约束users_organization_id_foreign外键(organization_id)引用organizationsid )删除级联)

以下是organization表的迁移代码:

Schema::create('organizations', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('subdomain')->nullable();
    $table->timestamps();
    $table->softDeletes();
});

以下是users表的迁移代码:

Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('organization_id')->unsigned();
    $table->foreign('organization_id')->references('id')->on('organizations');
    $table->string('first_name');
    $table->string('last_name');
    $table->string('email')->unique();
    $table->timestamps();
    $table->softDeletes();
});

我在网上研究过这个错误,确保数据类型相同是常见的事情。从我所看到的,它们是相同的。甚至比较疯狂的是,如果我直接在数据库中运行此查询,它就可以工作:

alter table `users` add constraint `users_organization_id_foreign` foreign key (`organization_id`) references `organizations` (`id`)

2 个答案:

答案 0 :(得分:3)

默认情况下,在每个Laravel中,首先创建新安装users表。但是,由于您在此表中添加了约束,因此需要先创建organizations表。

因此,通过在文件名中更改organizations迁移日期,在users表迁移之前放置organizations表迁移:

2014_01_01_000000_create_organizations_table.php

答案 1 :(得分:1)

同意阿列克谢的回答。我还建议您在运行迁移之前启用/禁用外键约束:

Schema::disableForeignKeyConstraints();
// Your migration code.
Schema::enableForeignKeyConstraints();

这样您就不需要重命名迁移文件了。