Я предполагаю, что вы создали внешний ключ для столбца 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');
});