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

У меня есть две модели:

Категория

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

Продукт

public function up()
{
    Schema::create('products', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->unsignedBigInteger('category_id')->index('category_id');
        $table->string('title', 20);
        $table->text('description');
        $table->timestamps();

        $table->foreign('category_id')->references('id')->on('categories');
    });
}

Когда я бегу php artisan make:migrate Я получаю эту ошибку:

Подсветка \ База данных \ QueryException: SQLSTATE [HY000]: Общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа (SQL: изменить таблицу products добавить ограничение products_category_id_foreign ссылки на внешние ключи (category_id) categories (id))

Что я делаю не так?

1 Ответ

2 голосов
/ 28 февраля 2020

И столбцы, на которые ссылаются, и столбцы, на которые ссылаются , должны иметь одинаковый тип данных, как объяснено в документации :

Соответствующие столбцы во внешнем ключе и ссылочный ключ должен иметь похожие типы данных. Размер и знак целочисленных типов должны быть одинаковыми . Длина типов строк не обязательно должна быть одинаковой. Для недвоичных (символьных) строковых столбцов набор символов и сопоставление должны быть одинаковыми.

Вы должны сделать оба столбца без знака или оба со знаком. Без знака кажется более подходящим для увеличенного ключа:

public function up()
{
    Schema::create('categories', function (Blueprint $table) {
        $table->unsignedBigInteger('id'); # changed to unsigned
        $table->string('title',10);
        $table->timestamps();
    });
}


public function up()
{
    Schema::create('products', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->unsignedBigInteger('category_id')->index('category_id');
        $table->string('title', 20);
        $table->text('description');
        $table->timestamps();

        $table->foreign('category_id')->references('id')->on('categories');
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...