Laravel (MySQL) миграция FK работает, когда он onDelete ('CASCADE'), но выдает ошибку для onDelete ('SET DEFAULT') - PullRequest
1 голос
/ 16 февраля 2020

У меня есть миграция в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...