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

Sequelize嵌套预加载(nested eager loading)查询仅返回1条记录问题

问题根因

该查询结果差异分为两种可能场景,对应不同原因:

  1. 主表Treatment中treatment_autoid匹配多条记录
    当前调用的findOne是Sequelize内置的单条查询方法,无论底层SQL命中多少条主记录,该方法始终仅返回第一条符合条件的主记录,两端执行结果差异是方法本身的特性导致的。
  2. 主表Treatment中treatment_autoid仅匹配1条记录,原生SQL因联表返回多条扁平化结果
    该情况属于ORM的正常结果组装逻辑:Sequelize会自动把原生SQL返回的多条扁平化联表记录,聚合为1条主记录,关联的子表数据会嵌套到主记录的对应属性中,不会像原生SQL一样返回多条扁平化行。
修复方案
  • 若业务需要获取所有匹配的主表记录,将findOne替换为findAll方法即可,修改后代码如下:
_db.Treatment.findAll({
    where: {
        treatment_autoid: req.treatment_id
    },
    include: [
      {
        model: _db.TreatmentSection,            
        include: {
            model: _db.TreatmentSectionChannel,
        },            
      }
    ]
})
  • 若确认主表仅有1条匹配记录,仅需要查看所有关联的子表数据,直接访问返回主记录的关联属性(属性名由你定义的关联别名决定,默认通常为模型名的复数形式)即可拿到全量子记录,无需修改查询逻辑。

提示:你贴出的原始代码缺少include数组的闭合方括号和查询方法的闭合括号,实际运行时需要补全避免语法报错。

内容的提问来源于stack exchange,提问作者Yehuda Zadik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:54:04