создание внешнего ключа с помощью laravel приводит к ошибке: невозможно добавить ограничение внешнего ключа - PullRequest
1 голос
/ 20 мая 2019

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

Код для создания моей таблицы продуктов:

public function up()
{
    Schema::create('products', function (Blueprint $table) {
      $table->bigIncrements('id');
      $table->string('title');
      $table->string('imgpath');
      $table->text('description');
      $table->integer('price');
      $table->integer('hotItemNumber')->nullable();
      $table->timestamps();
      $table->softDeletes();
    });
}

Код для создания моей таблицы категорий:

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

Код для создания моеговнешний ключ (в отдельном файле миграции):

public function up()
{
  Schema::table('products', function($table) {
    $table->integer('category_id')->unsigned()->index();
    $table->foreign('category_id')->references('id')->on('categories');
  });
}

Я ожидал создать внешний ключ, но он выдает ошибку.

SQLSTATE [HY000]: общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа (SQL: изменить таблицу products добавить ограничение products_categoryid_foreign ссылки на внешний ключ (categoryid) categories (* 1019)*))

Ответы [ 2 ]

1 голос
/ 20 мая 2019

Итак, ваша products таблица id имеет int тип данных, categoryid должен иметь тот же тип данных.

Использовать $table->unsignedBigInteger('categoryid'); вместо.

Ссылка :

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

1 голос
/ 20 мая 2019

в новой миграции попробуйте изменить тип, как показано ниже

public function up()
{
  Schema::table('products', function($table) {
    $table->bigInteger('category_id')->unsigned()->index();
    $table->foreign('category_id')->references('id')->on('categories');
  });
}

, потому что в вашей таблице categories идентификатор имеет тип bigIncrements

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