如何解决Sequelize自动为模型名称添加字符“s”的问题
如何解决Sequelize自动为模型名称添加字符“s”的问题
嗨,我之前也碰到过这个坑!Sequelize默认会自动把模型名称复数化来匹配数据库表名,这就是为什么你定义的user模型,它却跑去查询users表的原因。给你两个简单的解决办法:
方法一:给单个模型手动指定表名
在定义模型的时候,通过第三个配置参数明确指定对应的数据表名称,这样就会覆盖Sequelize的自动复数逻辑。示例代码如下:var User = fsdb.define("user", { // 这里写你的模型字段定义,比如username、password这些 username: DataTypes.STRING, password: DataTypes.STRING, email: DataTypes.STRING }, { tableName: 'user' // 手动绑定到数据库里的user表 });方法二:全局禁用自动复数化
如果你的项目里所有数据表都是单数命名,不想逐个模型设置的话,可以在初始化Sequelize实例的时候,全局配置禁用自动复数功能:const sequelize = new Sequelize('你的数据库名', '用户名', '密码', { host: 'localhost', dialect: 'mysql', // 或者你用的其他数据库类型 define: { freezeTableName: true // 开启这个配置后,所有模型的表名都和模型名保持一致 } });
选哪种方式看你的需求:如果只是个别模型需要特殊处理,用方法一更灵活;如果整个项目都遵循单数表名规范,方法二能省不少事。
备注:内容来源于stack exchange,提问作者Patrick Phan
相关产品推荐
相关产品推荐

