Одной из возможных проблем является разница в типе данных между product.category_id
(столбец внешнего ключа) и category.id
(ссылочный первичный ключ).
(Это только одна возможность. Возможно, проблема в чем-то другом.)
Но мы должны сначала проверить, что типы данных двух столбцов совпадают точно . Если они не совпадают, мы не сможем определить ограничение внешнего ключа InnoDB.
Я предполагаю, что category.id
определяется как BIGINT
тип данных.
(Это предположение, я не эксперт по построителю схем Laravel, но я вижу, что построитель схем выполняет большую работу по маскировке / сокрытию фактического определения SQL таблицы MySQL.)
(Не совсем понятно, почему Laravel требует, чтобы тип данных для столбца внешнего ключа был указан. Мы знаем, что он соответствует типу данных указанного столбца.)
Мое предположение при исправлении состоит в том, чтобы изменить эту строку
от:
$table->integer('category_id')->unsigned()->nullable();
до:
$table->bigInteger('category_id')->nullable();