Ошибка миграции Laravel при добавлении внешнего ключа - PullRequest
0 голосов
/ 04 сентября 2018

Итак, я получаю эту ошибку:

Подсветка \ База данных \ QueryException: SQLSTATE [HY000]: общая ошибка: 1005 Невозможно создать таблицу yamldb. #sql-3928_6ea (номер ошибки: 150 "Foreign ограничение ключа сформировано неправильно ") (SQL: изменить таблицу tblquestion добавить ограничение tblquestion_que_csd_id_foreign внешний ключ (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']);
}

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Ваши внешние ключи должны быть того же типа, что и ваши первичные ключи.

Вам либо нужно использовать

$table->mediumIncrements('csd_id');

В вашей таблице 2 миграция для столбца id. Или измените тип

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

К

$table->integer('que_csd_id')->unsigned();
0 голосов
/ 04 сентября 2018

Типы обоих столбцов не одинаковы.

tblquestion.que_csd_id - среднее целое число.
tblcsdomain.csd_id - нормальное целое число.

Вам придется изменить один из них на тип другого, чтобы это работало.

...