Laravel执行迁移报1060重复列名cm_firebase_token错误如何解决
解决方案
错误原因
报错的核心逻辑是你的users数据库表中已经存在cm_firebase_token字段,迁移文件执行时尝试重复新增同名字段触发了数据库冲突,和你之前尝试的依赖更新、扩展安装没有关联,所以无法解决问题。
可行方案(按需选择)
方案1:修改迁移文件增加兼容性判断(最推荐,全环境通用)
修改对应迁移文件的up方法,先判断字段不存在再执行新增操作,后续任何环境执行迁移都不会再触发该报错,修改后代码如下:
public function up() { Schema::table('users', function (Blueprint $table) { if (!Schema::hasColumn('users', 'cm_firebase_token')) { $table->string('cm_firebase_token')->nullable(); } }); }
修改完成后重新执行php artisan migrate即可。
方案2:手动标记迁移已执行
如果你确认该字段已经是正确的表结构,不需要修改,可以手动在数据库的migrations表中插入该迁移的执行记录:
- 查看该迁移文件的完整文件名,例如
2024_05_01_123456_add_cm_firebase_token_column_to_users_table.php - 取文件名中
.php前面的部分作为migration字段的记录值,batch字段取值为当前migrations表中最大的batch值加1,插入新记录即可 - 后续执行迁移时Laravel会默认该迁移已经执行,不会重复运行
方案3:手动删除重复字段后执行迁移
如果该字段是之前测试时手动添加的、不属于现有正确表结构,可以直接登录数据库,删除users表中的cm_firebase_token字段,再重新执行php artisan migrate。
方案4:重置全部迁移(仅本地开发环境可用)
如果是本地开发环境,数据库数据不需要保留,可以执行php artisan migrate:fresh命令清空所有表后重新执行全部迁移,注意该操作会清除所有数据库数据,生产环境严禁使用。
内容的提问来源于stack exchange,提问作者crazymhegde
相关产品推荐
相关产品推荐

