添加外键时Laravel迁移错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了添加外键时Laravel迁移错误相关的知识,希望对你有一定的参考价值。
所以我得到这个错误:
Illuminate Database QueryException:SQLSTATE [HY000]:一般错误:1005无法创建表
yamldb
.#sql-3928_6ea
(错误:150“外键约束形成错误”)(SQL:alter tabletblquestion
add constrainttblquestion_que_csd_id_foreign
foreign key(que_csd_id
)引用tblcsdomain
(csd_id
))
表格1
Schema::create('tblquestion', function (Blueprint $table) {
$table->increments('que_id');
$table->string('que_name', 128);
$table->string('que_identifier', 128);
$table->string('que_version', 50);
$table->char('que_content');
$table->char('que_answers');
$table->integer('que_grd_id')->unsigned();
$table->integer('que_quf_id')->unsigned();
$table->integer('que_lan_id')->unsigned();
$table->boolean('que_mandatory', false);
$table->char('que_thisisinformatics');
$table->char('que_translations');
$table->char('que_explanation');
$table->char('que_background_info');
$table->integer('que_cou_id')->unsigned();
$table->boolean('que_allow_share', false);
$table->integer('que_source_cou_id')->unsigned();
$table->integer('que_source_que_id');
$table->mediumInteger('que_csd_id')->unsigned();
$table->string('que_token', 32);
});
表2
Schema::create('tblcsdomain', function (Blueprint $table) {
$table->increments('csd_id');
$table->string('csd_name', 128);
$table->string('csd_token', 128);
});
移民
Schema::table('tblquestion', function (Blueprint $table) {
$table->foreign('que_csd_id')->references('csd_id')->on('tblcsdomain');
}
此外,我正在尝试将FK添加到现有列。并且Laravel添加了FK但是在回滚时它不会删除它们。
Schema::table('tblquestion', function (Blueprint $table) {
$table->dropForeign(['que_csd_id']);
}
答案
您的外键需要与主键的类型相同。
你要么需要使用
$table->mediumIncrements('csd_id');
在表2中迁移id列。或者改变类型
$table->mediumInteger('que_csd_id')->unsigned();
至
$table->integer('que_csd_id')->unsigned();
另一答案
两列的类型不同。
tblquestion.que_csd_id
是一个中等整数。
tblcsdomain.csd_id
是一个正常的整数。
您必须将其中一个更改为另一个的类型才能使其正常工作。
以上是关于添加外键时Laravel迁移错误的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 迁移 - 一般错误:1215 无法添加外键约束
MySQL数据库的Laravel迁移“无法添加外键约束”错误