Errno: 150 «Ограничение внешнего ключа сформировано неправильно», но проверьте все, что я знаю

Эта проблема

При выполнении миграции последняя таблица заканчивается ошибкой в ​​заголовке.

Моя база данных является локальной MySQL.

Ошибка

Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1005 Can't create table shopping_list_develop.#sql-1698_2b (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table products add constraint products_shopping_list_id_foreign foreign key (shopping_list_id) references shopping_lists (id) on delete set null on update cascade)

Уже попробовал

Вот что я проверяю:

  • Родительская таблица (shopping_lists) создается перед дочерней таблицей (products).
  • Внешний ключ shopping_list_id имеет тот же тип столбца, на который он ссылается.
  • Две таблицы, shopping_lists и products, имеют один и тот же движок БД (InnoDB).

Я читал другие ответы, но не могу найти решение.

Миграции

2019_05_13_192170_create_shopping_lists_table.php

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Carbon\Carbon;

class CreateShoppingListsTable extends Migration {

    public function up()
    {
        Schema::create('shopping_lists', function(Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name')->nullable()->default(Carbon::now()->toDateString());
            $table->unsignedBigInteger('user_id');
            $table->timestamps();

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

    public function down()
    {
        Schema::table('shopping_lists', function(Blueprint $table) {
            $table->dropForeign(['user_id']);
        });
        Schema::dropIfExist('shopping_lists');
    }
}

2019_05_13_192700_create_products_table.php

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;

class CreateProductsTable extends Migration {

    public function up()
    {
        Schema::create('products', function(Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('brand')->nullable()->default(null);
            $table->float('price', 6,2)->nullable()->default(null);
            $table->string('note')->nullable()->default(null);
            $table->string('salable_type');
            $table->unsignedBigInteger('salable_id');
            $table->unsignedBigInteger('shopping_list_id');
            $table->timestamps();

            $table->foreign('shopping_list_id')->references('id')->on('shopping_lists')
                        ->onDelete('set null')
                        ->onUpdate('cascade');
        });
    }

    public function down()
    {
        Schema::table('products', function(Blueprint $table) {
            $table->dropForeign(['shopping_list_id']);
        });

        Schema::dropIfExist('products');
    }
}

Спасибо за помощь и спросите меня любую дополнительную информацию, если вам нужно.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
47
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашей миграции 2019_05_13_192700_create_products_table.php onDelete вы устанавливаете значение null.

$table->foreign('shopping_list_id')->references('id')->on('shopping_lists')
                        ->onDelete('set null')
                        ->onUpdate('cascade');

Но объявленный вами столбец не имеет значения NULL

$table->unsignedBigInteger('shopping_list_id');

Попробуйте сделать этот столбец обнуляемым, выполнив вместо этого следующее:

$table->unsignedBigInteger('shopping_list_id')->nullable();

Другие вопросы по теме