SQLSTATE [HY000]: общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа. Laravel 5.8 - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь создать внешний ключ для таблицы «users» с помощью Laravel 5.8.

Автоматически сгенерированная таблица миграции Laravel 5.8 выглядит следующим образом:

public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

Тогда из моих "репозиториев"таблица Я ссылаюсь на таблицу" пользователи "следующим образом:

        Schema::create('repositories', function (Blueprint $table) {
            $table->string('id', 8)->primary();
            $table->string('name')->nullable(false);
            $table->string('size')->nullable(false);
            $table->unsignedInteger('user_id')->nullable(false);
            $table->timestamps();
        });


        Schema::table('repositories', function (Blueprint $table) {
            $table->foreign('user_id')->references('id')->on('users');
        });

Но я получаю сообщение об ошибке" Общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа "для этого кода.Было много решений, связанных с этой проблемой.

Общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа в laravel

Миграция: Невозможно добавить ограничение внешнего ключа в laravel

Ошибка миграции Laravel «Невозможно добавить ограничение внешнего ключа» с базой данных MySQL

Я уже попробовал вышеуказанные решения.Но моя проблема не была решена

Ответы [ 3 ]

2 голосов
/ 12 марта 2019

Попробуйте это

Schema::create('repositories', function (Blueprint $table) {
     $table->string('id', 8)->primary();
     $table->string('name')->nullable(false);
     $table->string('size')->nullable(false);
     $table->unsignedBigInteger('user_id');
     $table->timestamps();

     $table->foreign('user_id')->references('id')->on('users');
});

Согласно laravel 5.8 Ограничения внешнего ключа

Schema::table('posts', function (Blueprint $table) {
    $table->unsignedBigInteger('user_id');

    $table->foreign('user_id')->references('id')->on('users');
});
0 голосов
/ 26 марта 2019

Начиная с Laravel 5.8, bigIncrements используется вместо приращений для первичных ключей.Если вы используете bigIncrements для своего первичного ключа, вы должны объявить поле user_id как bigInteger вместо целого числа.Таким образом, поле первичного ключа и внешнего ключа будет использовать один и тот же тип данных, в противном случае вы получите ошибку

0 голосов
/ 12 марта 2019

Вероятно, это связано с тем, что столбец user_id не соответствует столбцу id.

user_id должен иметь тип bigInteger, а также быть проиндексированным.

Ref: Установка внешнего ключа bigInteger для bigIncrements в Laravel 5.4

...