миграция laravel SQLSTATE [HY000]: общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа - PullRequest
1 голос
/ 06 марта 2019

Когда я пытаюсь запустить команду переноса в laravel, я получаю эту ошибку

 Illuminate\Database\QueryException  : SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `posts` add constraint `posts_user_id_foreign` foreign key (`user_id`) references `users` (`id`) on delete cascade)

Прежде чем пометить этот вопрос как дублированный или отклоненный, прочитайте его полностью.

Решения, которые я нашел на этом сайте, были:

  1. Пометить как unsigned У меня есть это
  2. Сделать целое число за 2 шага У меня есть
  3. Проблема заказа схемы Я предоставляю скриншот, чтобы увидеть, что это не так

one

Я не уверен, почему я получаю эту ошибку, вот мой код:

Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->string('slug')->unique();
            $table->longText('body');
            $table->string('photo');
            $table->text('meta_description')->nullable();
            $table->text('meta_tags')->nullable();
            $table->integer('user_id')->unsigned();
            $table->string('publish')->default('0');
            $table->string('comment')->default('0');
            $table->timestamps();
});
Schema::table('posts', function (Blueprint $table) {
  $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});

Есть идеи?

Обновление

Схема пользователя

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

Ответы [ 2 ]

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

Просто замените этот код ::

Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->string('slug')->unique();
            $table->longText('body');
            $table->string('photo');
            $table->text('meta_description')->nullable();
            $table->text('meta_tags')->nullable();
            $table->bigInteger('user_id')->unsigned();
            $table->string('publish')->default('0');
            $table->string('comment')->default('0');
            $table->timestamps();

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

});
2 голосов
/ 06 марта 2019

Первичным ключом в таблице users является BigIncrements, который создает столбец большого целого без знака, но внешний ключ в таблице posts является целым числом, поэтому они не одного типа.

Изменение внешнего ключа на bigInteger исправит это.

так вот:

$table->bigInteger('user_id')->unsigned();

вместо:

$table->integer('user_id')->unsigned();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...