使用Laravel迁移添加外键约束
问题描述:
我已经启动了一个新的laravel 5.5项目,并且在尝试向我的users
表添加外键时收到以下错误:一般错误:1215无法添加外键约束( SQL:在删除级联改变表users
附加约束users_organization_id_foreign
外键(organization_id
)引用organizations
(id
))使用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`)
任何帮助,不胜感激!
答
默认情况下,在每个Laravel全新安装users
表中首先创建。但是由于您在此表中添加了约束,因此您需要先创建organizations
表。
所以,把organizations
表迁移之前users
表迁移通过在文件名改变organizations
迁移日期:
2014_01_01_000000_create_organizations_table.php
+1
谢谢,这解决了我的问题! – three3
答
与阿列克谢的答案一起去。我也建议你启用/禁用的外键约束您运行迁移之前:
Schema::disableForeignKeyConstraints();
// Your migration code.
Schema::enableForeignKeyConstraints();
这样你就不需要重命名迁移文件。
您是否将dbal添加到您的composer.json?如果不添加,作曲家需要doctrine/dbal – pseudoanime