#laravel #migration #key
#laravel #миграция #Клавиша
Вопрос:
Я пытаюсь выполнить миграцию «категорий», где каждая категория ссылается на свою родительскую категорию по идентификатору в той же таблице.
Миграция:
Schema::create('categories', function (Blueprint $table) {
$table->string('id', 36)->primary();
$table->string('parent_id', 36)->nullable();
$table->foreign('parent_id')->references('id')->on('categories');
$table->string('name');
});
Но я получаю следующую ошибку:
Исключение IlluminateDatabaseQueryException: SQLSTATE[HY000]: Общая ошибка: 1215 Не удается добавить ограничение внешнего ключа (SQL: alter table
categories
add constraintcategories_parent_id_foreign
ссылки на внешний ключ (parent_id
)categories
id
))
Типы полей одинаковы, и я не знаю, что делать. Удаление «-> nullable()» не имеет никакого эффекта.
Платформа Laravel версии 6.20.7
Спасибо.
Комментарии:
1. У вас есть родительская таблица в базе данных?
2. Irshad, таблица одинакова, это одна миграция для всех.
3. Откорректируйте, если вы сказали о «$table-> foreign(‘parent_id’)->references(‘id’)-> on(‘categories’)-> nullable();» — нет, та же ошибка.
4. Добро пожаловать в SO … кстати, какая версия Laravel?
5. @lagbox спасибо,
Laravel Framework 6.20.7
Ответ №1:
Добавьте ограничение внешнего ключа в другой прогон, как показано ниже
public function up()
{
Schema::create('categories', function (Blueprint $table) {
$table->string('id', 36)->primary();
$table->string('parent_id', 36)->nullable();
$table->string('name');
});
Schema::table('categories',function (Blueprint $table){
$table->foreign('parent_id')->references('id')->on('categories');
});
}
Комментарии:
1. Спасибо! Это странный, но работающий способ добиться этого!