添加外键时出现Laravel迁移错误

时间:2018-09-04 13:57:04

标签: php laravel foreign-keys migration

所以我得到这个错误:

  

Illuminate \ Database \ QueryException:SQLSTATE [HY000]:常规错误:   1005无法创建表yamldb#sql-3928_6ea(错误号:150“ Foreign   键约束的格式不正确”)(SQL:更改表tblquestion   添加约束tblquestion_que_csd_id_foreign外键   (que_csd_id个引用tblcsdomaincsd_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']);
}

2 个答案:

答案 0 :(得分:1)

您的外键必须与主键的类型相同。

您要么需要使用

$table->mediumIncrements('csd_id');

在表2迁移中的id列。或更改

的类型
$table->mediumInteger('que_csd_id')->unsigned();

收件人

$table->integer('que_csd_id')->unsigned();

答案 1 :(得分:0)

两列的类型不同。

tblquestion.que_csd_id是中等整数。
tblcsdomain.csd_id是普通整数。

您必须将其中一种更改为另一种类型才能使用。