如何使用Sequelize实现关联查询,仅获取用户表的name字段内容
修改方案
你需要将include参数从直接传入模型改为对象格式,通过attributes字段指定关联模型仅返回的字段,同时如果要完全对齐你给出的INNER JOIN逻辑,需要补充required: true配置(Sequelize默认关联为左外连接)。
最终可运行代码
Comments.findAll({ where: { projectId: id }, // 对应原生SQL的comments.comment,仅返回评论内容,不需要可删除本行 attributes: ['comment'], include: [{ model: User, // 仅返回关联用户的name字段 attributes: ['name'], // 强制使用INNER JOIN,和你的SQL逻辑完全一致 required: true }] }).then(response => { res.json({comments: response}) })
改动说明
- 关联模型配置的
attributes: ['name']是核心改动,会过滤关联User的返回字段,仅保留你需要的name - 顶层的
attributes: ['comment']是可选配置,用于限制评论表仅返回comment字段,和你给出的原生SQL查询字段完全对齐,如果不需要限制评论表返回字段可以直接删除 required: true会把默认的左外连接改为内连接,仅返回有关联用户的评论,和你的SQL逻辑匹配,如果可以接受无关联用户的评论也返回的话可以删除这个配置
内容的提问来源于stack exchange,提问作者Rodrigo Brinate
相关产品推荐
相关产品推荐

