laravel6:如何通过迁移更改外键的引用



我试图通过dropforeign key更改外键引用。我认为一切都很好,但我得到了这个错误:

SQLSTATE[42000]:语法错误或访问冲突:1091无法DROP外国关键教师_日程表_日历_产品_国外;检查它是否存在(SQL:alter table teacher_schedule_calendars drop外键教师_日程表_产品_国外(

如何解决它?

我的迁移代码是:

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

首先,我删除了外来语,然后添加了参考文献。但它没有起作用。

我假设您在上一次迁移中在product_id列上创建了一个外键,您只想续订它或用另一个表的外键替换它。在这种情况下,由于迁移的工作方式以及单个数据库语法转换命令的方式,您试图做的事情可能会有问题。

您可以做的是将命令拆分为两个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');  
});

最新更新