如何在Sequelize的include关联查询中添加where条件筛选数据
解决方案
当然可以直接在Sequelize查询语句里实现这个筛选逻辑,不用做后续的二次过滤,直接在数据库层面完成筛选更高效。
你只需要在include的Role模型配置里添加筛选条件,同时通过required: true确保只有匹配角色条件的用户才会被返回:
const users = await User.findAll({ where: { last_name: 'raj' }, include: [ { model: Role, where: { name: 'admin' }, // 替换成你Role模型中存储角色名称的实际字段 required: true // 开启内连接,只返回同时满足用户和角色条件的记录 } ] });
关键说明:
include中的where:直接对关联的Role模型设置筛选条件,指定角色为admin。required: true:将默认的左外连接(LEFT JOIN)改为内连接(INNER JOIN),这样只有同时符合last_name='raj'和角色为admin的用户才会被查询出来,不会返回没有匹配对应角色的用户。- 如果你的Role模型中存储角色标识的字段不是
name(比如是role_type),记得把where里的字段名替换成实际的字段。
内容的提问来源于stack exchange,提问作者Abby
相关产品推荐
相关产品推荐

