Sequelize一对多关联查询返回空数组问题排查求助
问题诊断与修复方案
核心问题:多余且逻辑错误的where条件
你在include关联Stats时添加的where: { id: models.sequelize.col('project.id') }是导致stats始终为空的根本原因:
- 这个条件试图让Stats的
id字段等于Project的id字段,但你的关联逻辑是Stats通过projectId关联Project的id,这完全不符合你的数据关系,自然查不到匹配的记录。 - 而且你已经在模型关联中定义了外键关联规则,Sequelize会自动处理关联查询的匹配逻辑,不需要手动添加这个错误的
where条件。
修复后的查询代码
只需要保留正确的include配置即可,去掉多余的where:
models.Project.findByPk(req.params.projectId, { include: [ { model: models.Stats, as: 'stats', required: false // 保持左连接,即使没有Stats也返回Project } ] }).then((project) => { // 现在project.get().stats应该能正确返回关联的Stats列表了 })
关于你的关联定义
顺便确认一下:你的Project和Stats的关联定义是完全正确的:
- Project的
hasMany指定了as: 'stats'、foreignKey: 'projectId'(对应Stats表的外键)、sourceKey: 'id'(对应Project表的主键) - Stats模型里的
projectId字段也正确配置了references指向Project表的id
为什么手动执行SQL有结果?
你提到捕获Sequelize生成的SQL手动执行有结果,大概率是因为你手动执行时误删了那个错误的WHERE Stats.id = Project.id条件,所以才得到了正确的结果——这也反向验证了问题出在那个多余的where上。
内容的提问来源于stack exchange,提问作者Eray
相关产品推荐
相关产品推荐

