如何通过Strapi CLI修改模型属性?解决重复属性启动失败问题
解决Strapi因重复模型属性导致无法启动的问题
别担心,这种踩坑的经历我也有过,咱们一步步来搞定它~
问题根源
你在Admin界面给Dish模型添加了重复的Restaurant属性,Strapi启动时会尝试同步模型配置到数据库,但SQLite不允许同一表存在重复列名,所以抛出了duplicate column name: Restaurant的错误,直接导致服务器启动失败。
解决方案
目前Strapi CLI没有直接修改模型属性的命令,但我们可以通过手动调整模型配置文件或数据库来解决:
方法1:修改Strapi模型配置文件(优先推荐)
Strapi的所有模型配置都存在项目本地文件里,不用进Admin也能修改:
- 找到你的Strapi项目目录下的
./api/dish/models/Dish.settings.json(如果是JS版本则是Dish.js) - 打开文件后定位到
attributes节点,你会看到两个重复的Restaurant属性配置,删掉其中多余的那一个,只保留一个合法字段 - 保存文件后重新运行
strapi start,Strapi会重新同步模型到数据库,正常情况下就能启动成功了
方法2:直接调整SQLite数据库(方法1无效时使用)
如果修改模型文件后还是报错,说明数据库里已经残留了重复列的问题,需要手动清理:
- 先确保Strapi已经停止运行(如果之前一直在尝试启动,先终止进程)
- 找到项目根目录下的
database.sqlite文件(这是Strapi默认的SQLite数据库文件) - 用SQLite命令行工具打开它:
sqlite3 database.sqlite - 先查看
dishes表的结构,确认重复列的存在:.schema dishes - 如果你的SQLite版本在3.35.0以上(可以用
sqlite3 --version查看),直接删除重复列:ALTER TABLE dishes DROP COLUMN Restaurant;提示:如果有两个完全重复的列,执行一次删除即可;如果需要保留某一列的数据,记得先确认清楚再操作
- 如果SQLite版本较低不支持
DROP COLUMN,可以按以下步骤操作:- 先导出
dishes表的数据备份:.output dishes_backup.sql .dump dishes - 删除旧表:
DROP TABLE dishes; - 输入
.exit退出SQLite命令行,重新启动Strapi,它会自动根据模型配置重建dishes表 - 如果需要恢复数据,再次打开数据库导入备份:
.read dishes_backup.sql
- 先导出
完成以上操作后,再运行strapi start,服务器应该就能正常启动,你也能重新访问Admin界面了~
内容的提问来源于stack exchange,提问作者Jay P.
相关产品推荐
相关产品推荐

