You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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无效时使用)

如果修改模型文件后还是报错,说明数据库里已经残留了重复列的问题,需要手动清理:

  1. 先确保Strapi已经停止运行(如果之前一直在尝试启动,先终止进程)
  2. 找到项目根目录下的database.sqlite文件(这是Strapi默认的SQLite数据库文件)
  3. 用SQLite命令行工具打开它:
    sqlite3 database.sqlite
    
  4. 先查看dishes表的结构,确认重复列的存在:
    .schema dishes
    
  5. 如果你的SQLite版本在3.35.0以上(可以用sqlite3 --version查看),直接删除重复列:
    ALTER TABLE dishes DROP COLUMN Restaurant;
    

    提示:如果有两个完全重复的列,执行一次删除即可;如果需要保留某一列的数据,记得先确认清楚再操作

  6. 如果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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:49:49