我试图通过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');
});