1215 Невозможно добавить ограничение внешнего ключа в laravel 5, внешний ключ - PullRequest
0 голосов
/ 23 апреля 2019

2019_04_23_164151_create_contacts_table.php файл переноса

<?php

 use Illuminate\Support\Facades\Schema;
 use Illuminate\Database\Schema\Blueprint;
 use Illuminate\Database\Migrations\Migration;

 class CreateContactsTable extends Migration
 {
/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{

    Schema::create('contacts', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('first_name');
        $table->string('last_name');
        $table->string('surname');
        $table->timestamps();
    });

    Schema::create('contacts_relations', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->unsignedInteger('phone_id')->nullable()->default(1);
        $table->unsignedInteger('contact_id')->nullable()->default(1);
    });

    Schema::create('contact_phone', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->integer('phone_number');
        $table->unsignedInteger('contacts_relations_id')->nullable()->default(1);
    });

}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::dropIfExists('contacts');
}}

2019_04_24_183110_contacts_relations.php установщик внешнего ключа

 <?php

 use Illuminate\Support\Facades\Schema;
 use Illuminate\Database\Schema\Blueprint;
 use Illuminate\Database\Migrations\Migration;

 class ContactsRelations extends Migration
 {
/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::table('contacts_relations', function (Blueprint $table) {
        $table->foreign('contact_id')->references('id')->on('contacts');
    });
    Schema::table('contact_phone', function (Blueprint $table) {
        $table->foreign('contacts_relations_id')->references('id')->on('contacts_relations');
    });

}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    //
}
}
*1000* запустить свежую миграцию php artisanи получить SQLSTATE [HY000]: общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа (SQL: изменить таблицу contacts_relations добавить ограничение contacts_relations_contact_id_foreign ссылки на внешний ключ (contact_id) contacts (id) при удалениикаскад при обновлении каскад)

1 Ответ

0 голосов
/ 23 апреля 2019

Вы должны убедиться, что все столбцы имеют одинаковый тип. Например, в таблице contacts столбец id представляет собой большое целое число без знака, поэтому при создании столбца contact_id в contacts_relations вместо:

$table->unsignedInteger('phone_id')->nullable()->default(1);

должно быть:

$table->unsignedBigInteger('phone_id')->nullable()->default(1);

Аналогичная вещь для contacts_relations_id столбца

...