Почему создание внешнего ключа в Laravel 5.8 не удается? - PullRequest
0 голосов
/ 04 марта 2019

В более старой версии Laravel приведенный ниже скрипт миграции работал без сбоев, но я добавил свой свежий Laravel 5.8 и запустил скрипт.Я получаю Error: foreign key was not formed correctly

Оценка миграции:

public function up() { 
    Schema::create('evaluation', function (Blueprint $table) { 
        $table->increments('id'); 
        $table->integer('user_id')->unsigned()->index(); 
        $table->timestamps();
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    });
}

Миграция пользователей:

public function up() { 
    Schema::create('users', function (Blueprint $table) { 
        $table->bigIncrements('id'); 
        $table->timestamps();
    });
}

Ответы [ 2 ]

0 голосов
/ 28 августа 2019
  update your `integer('user_id')` to `bigInteger('user_id')`
public function up() { 
        Schema::create('evaluation', function (Blueprint $table) { 
            $table->increments('id'); 
            $table->bigInteger('user_id')->unsigned()->index(); 
            $table->timestamps();
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        });
    }
0 голосов
/ 05 марта 2019

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

Вы объявили свой user.id первичный ключ как $table->bigIncrements('id'), который становится BIGINT UNSIGNED AUTO_INCREMENT в синтаксисе MySQL.

Вы должны объявить внешний ключ как $table->unsignedBigInteger('user_id'), который в MySQL станет BIGINT UNSIGNED, что делает его совместимым с внешним ключом для столбца user.id.

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