У меня есть миграция в Laravel с внешним ключом,
Он отлично работает, когда я устанавливаю onDelete('CASCADE')
, но выдает ошибку для onDelete('SET DEFAULT')
SQLSTATE [ HY000]: общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа (SQL: изменить таблицу users
добавить ограничение users_theme_id_foreign
ссылки на внешний ключ (theme_id
) themes
(id
) при удалении SET DEFAULT при каскаде обновления )
Таблица тем (выполняется до таблицы пользователей):
Schema::create('themes', function (Blueprint $table) {
$table->smallIncrements('id');
$table->string('color')->nullable();
});
// Inserting default theme
DB::table('themes')->insert([
'id' => 1,
'name' => 'Something'
]);
Таблица пользователей (только столбцы FK и theme_id):
Schema::create('users', function (Blueprint $table) {
...
$table->unsignedSmallInteger('theme_id')->default(1);
...
$table->foreign('theme_id')->references('id')->on('themes')->onDelete('SET DEFAULT')->onUpdate('SET DEFAULT');
});
Обновление :
Как я уже говорил, миграция пользователей выше не удалась, но странно, как только я заменяю внешний ключ на CASCADE
, он работает просто отлично!
$table->foreign('theme_id')->references('id')->on('themes')->onDelete('CASCADE')->onUpdate('CASCADE');
Подробнее:
- Обе таблицы InnoDB и имеют одинаковую кодировку и сопоставление.
- Laravel 6.15.0
- PHP v7.4.1
- MySQL v5.7.26