Node.js Sequelize操作PostgreSQL模型关联报错及跨文件访问模型问题
问题原因与解决方案
核心错误原因
- 模型名称大小写不匹配:SousPrefectures模型定义的
modelName为Sousprefectures(p小写),但Prefectures模型关联时调用的是models.SousPrefectures(P大写),导致Sequelize找不到对应模型,抛出非Model子类的错误 - 关联类型错误:需求为一对多关联,Prefectures模型中错误使用了一对一的
hasOne方法,应改为hasMany
修改步骤
1. 修正Prefectures模型的关联代码
打开Prefectures模型文件,修改associate方法:
static associate(models) { // 1. 把hasOne改为hasMany 2. 模型名改为和Sousprefectures的modelName一致的小写p版本 Prefectures.hasMany(models.Sousprefectures, { foreignKey: { name: "prefecture_id", allowNull: false } }); }
如果要统一使用大写P的命名,也可以修改Sousprefectures模型的modelName参数为SousPrefectures,两边保持一致即可:
// Sousprefectures模型的init配置 { sequelize, freezeTableName: true, modelName: 'SousPrefectures', // 改为大写P,后续关联时就可以用models.SousPrefectures }
2. 控制器中调用模型的方法
直接引入models目录下的index.js即可访问所有注册的模型:
// 示例:控制器文件中调用 const db = require('../models'); // 路径根据你的目录结构调整 // 查询Prefectures同时关联查出对应的Sousprefectures async function getPrefecturesWithSous() { const data = await db.Prefectures.findAll({ include: db.Sousprefectures // 注意名称和modelName保持一致 }); return data; }
内容的提问来源于stack exchange,提问作者Sênowi Avenon
相关产品推荐
相关产品推荐

