Laravel迁移回滚报错:competition_id列不存在,求排查方案
Laravel迁移回滚报错解决方法
你的问题出在没有先删除依赖competition_id的索引和外键约束,直接执行删列操作导致MySQL报错。
在up()方法中,你给competition_id添加了两个约束:
- 关联
competitions表的外键约束 - 由
account_id和competition_id组成的联合唯一索引
MySQL要求必须先删除依赖该列的所有约束,才能删除列本身,否则会触发语法错误。
修正后的down()方法代码如下:
public function down(): void { Schema::table('posts', function (Blueprint $table) { // 先删除联合唯一索引 $table->dropUnique(['account_id', 'competition_id']); // 再删除外键约束(Laravel自动生成的外键名规则:表名_列名_foreign) $table->dropForeign('posts_competition_id_foreign'); // 最后删除列 $table->dropColumn('competition_id'); }); }
重新执行php artisan migrate:rollback即可完成回滚操作。
内容的提问来源于stack exchange,提问作者nufo
相关产品推荐
相关产品推荐

