2017-10-20 220 views
2

我已经启动了一个新的laravel 5.5项目,并且在尝试向我的users表添加外键时收到以下错误:一般错误:1215无法添加外键约束( SQL:在删除级联改变表users附加约束users_organization_id_foreign外键(organization_id)引用organizationsid))使用Laravel迁移添加外键约束

下面是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`) 

任何帮助,不胜感激!

+0

您是否将dbal添加到您的composer.json?如果不添加,作曲家需要doctrine/dbal – pseudoanime

回答

3

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

所以,把organizations表迁移之前users表迁移通过在文件名改变organizations迁移日期:

2014_01_01_000000_create_organizations_table.php 
+1

谢谢,这解决了我的问题! – three3

0

与阿列克谢的答案一起去。我也建议你启用/禁用的外键约束您运行迁移之前:

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

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