laravel6: как поменять ссылки на внешний ключ с миграцией - PullRequest
0 голосов
/ 26 февраля 2020

Я пытался изменить ссылку на внешний ключ с помощью ключа dropforeign. Я думаю, что все в порядке, но я получаю эту ошибку:

SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1091 Не могу DROP FOREIGN KEY teacher_schedule_calendars_product_id_foreign; проверить, что он существует (SQL: изменить таблицу teacher_schedule_calendars удалить внешний ключ teacher_schedule_calendars_product_id_foreign)

Как я могу решить эту проблему?

мой код миграции:

Schema::table('teacher_schedule_calendars', function (Blueprint $table) {
    $table->dropForeign(['product_id']);
    $table->foreign('product_id')->references('id') ->on('courses')->onDelete('cascade');  
});

Сначала я удалил чужое, а затем добавил ссылки. но это не сработало.

1 Ответ

0 голосов
/ 26 февраля 2020

Я предполагаю, что вы создали внешний ключ для столбца product_id в предыдущей миграции, и вы просто хотите обновить его или заменить его внешним ключом для другой таблицы. В этом случае то, что вы пытаетесь сделать, может быть проблематичным c из-за способа, которым работают миграции и как отдельные грамматики базы данных транслируют команды.

Что вы можете сделать, чтобы смягчить проблему, разделив команды на два Schema::table($table) блока:

Schema::table('teacher_schedule_calendars', function (Blueprint $table) {
    $table->dropForeign(['product_id']));
});

Schema::table('teacher_schedule_calendars', function (Blueprint $table) {
    $table->foreign('product_id')->references('id')->on('courses')->onDelete('cascade');  
});
...