SQLSTATE [HY000]: общая ошибка: 1215 - даже с InnoDB и без знака - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь создать внешний ключ в поле country_id из таблицы domains в поле id из countries.Но когда я делаю миграцию: php artisan migrate:fresh.

Сообщение об ошибке:

Illuminate\Database\QueryException  : SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `domains` add constraint `domains_country_id_foreign` foreign key (`country_id`) references `countries` (`id`) on delete cascade)

Вот файл миграции domains:

public function up()
{
    Schema::create('domains', function (Blueprint $table) {
        $table->increments('id');
        $table->string('code');
        $table->string('name');
        $table->string('display_name');
        $table->string('extension');
        $table->string('google_analytics')->nullable();
        $table->string('google_webmastertool')->nullable();
        $table->string('google_maps')->nullable();
        $table->integer('country_id')->unsigned();
        $table->boolean('actif')->default(true);
        $table->timestamps();
        $table->engine = 'InnoDB';
    });

    Schema::table('domains', function (Blueprint $table) {
        $table->foreign('country_id')->references('id')->on('countries')->onDelete('cascade');
    });
}

А вотфайл миграции countries:

public function up()
{
    Schema::create('countries', function (Blueprint $table) {
        $table->increments('id');
        $table->string('code');
        $table->string('name');
        $table->string('alpha2', 2);
        $table->string('alpha3', 3);
        $table->timestamps();
        $table->engine = 'InnoDB';
    });
}

Как видите, поле country_id не подписано, а механизм таблиц - InnoDB.Я уже провел другие миграции с внешним ключом, и они работают нормально, но этот не работает: |

Заранее спасибо за вашу помощь!

1 Ответ

0 голосов
/ 24 мая 2018

Решение от @ Bogdan.

Измените порядок миграции с помощью временной метки файла миграции. Вам нужно, чтобы файл с внешним ключом имел более высокую временную метку чем отметка времени файла миграции, в котором находится первичный ключ.

...