1215 Общая ошибка: невозможно добавить ограничение внешнего ключа Laravel - PullRequest
0 голосов
/ 06 марта 2020

У меня есть таблица с уже созданным ограничением внешнего ключа:

Ошибка:

 SQLSTATE[HY000]: General error: 1215 Cannot add foreign key 
constraint (SQL: alter table `league_seasons` add 
constraint `league_seasons_league_id_foreign` foreign key (`league_id`)
 references `leagues` (`id`) on delete cascade)

Это таблица лиги

public function up() {
        Schema::create('leagues', function (Blueprint $table) {
            $table->integer('id');
            $table->increments('increment_id');
            $table->string('type')->nullable();
            $table->integer('legacy_id')->nullable();
            $table->integer('country_id')->nullable();
    }

И это таблица league_seasons

    public function up() {
        Schema::create('league_seasons', function (Blueprint $table) {
            $table->integer('id');
            $table->increments('increment_id');
            $table->string('name')->nullable();
            $table->unsignedInteger('league_id');
            $table->string('is_current_season')->nullable();
            $table->string('current_round_id')->nullable();
            $table->string('current_stage_id')->nullable();
            App\Helpers\DbExtender::defaultParams($table, true);
        });

        Schema::table('league_seasons', function (Blueprint $table) {
            $table->foreign('league_id')->references('id')->on('leagues')->onDelete('cascade');

        });

    }

Я пытался поменять местами unSignedInteger, BigInteger, но, похоже, ни один из них не работает. Есть идеи, почему это так? Спасибо

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Для создания Foreign key тип данных для child column должен точно соответствовать parent column. Например, поскольку leagues.id является integer, league_seasons.league_id также должен быть integer, а не unsignedInteger.

Поэтому измените

$table->unsignedInteger('league_id');

до

$table->integer('league_id');
0 голосов
/ 06 марта 2020

Как указал @repat, добавление unSignedInteger с index () в обе таблицы работало для меня.

таблица финальной лиги:

public function up() {
        Schema::create('leagues', function (Blueprint $table) {
            $table->unsignedInteger('id')->index();
            $table->increments('increment_id');
            $table->string('type')->nullable();
            $table->integer('legacy_id')->nullable();
            $table->integer('country_id')->nullable();
            $table->string('name')->nullable();
    }

таблица финальной лиги:

    public function up() {
        Schema::create('league_seasons', function (Blueprint $table) {
            $table->integer('id');
            $table->increments('increment_id');
            $table->string('name')->nullable();
            $table->unsignedInteger('league_id')->index();
            $table->string('is_current_season')->nullable();
            $table->string('current_round_id')->nullable();
            $table->string('current_stage_id')->nullable();
            App\Helpers\DbExtender::defaultParams($table, true);
        });

        Schema::table('league_seasons', function (Blueprint $table) {
            $table->foreign('league_id')->references('id')->on('leagues')->onDelete('cascade');

        });

    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...