sequelize多对多关联查询,怎么使include里的查询只做出对父表的过滤的同时返回所有关联数据

伊萨格
  • 0
新手上路,请多包涵

用户表:

image.png

角色表

image.png

用户角色关系表(多对多关系)

image.png

image.png

现在提供一个接口是查询用户列表,这个查询可以通过传递的角色id去过滤出有该角色的用户,类似文档系统 通过标签过滤出有该标签的文章并返回该文章所有标签。

 /* 获取用户列表 */
    async getUserList(query) {
        const roleIds = query.roleIds || []
        const name = query.name || ''
        const frozen = query.frozen || -1
        let offset = ((query.currentPage - 1) * query.pageSize) || 0
        let limit = Number(query.pageSize) || 20
        console.log(query)
        console.log(offset, limit)
        try {
            const data = await this.Model.findAndCountAll({
                raw: false,
                where: {
                    [Op.and]: {
                        name: {
                            [Op.like]: `%${name}%`
                        },
                        frozen: {
                            [Op.not]: frozen
                        }
                    }
                },
                include: {
                    model: RoleModel,
                    as: 'roles',
                    attributes: [['id', 'roleId'], 'roleName'],
                    through: { attributes: [] },
                    where: {
                        id: {
                            [Op.or]: roleIds,//过滤出有该角色的用户
                        }
                    },
                },
                distinct: true,
                subQuery: false,
                offset,
                limit,
            });
            return {
                count: data.count,
                userList: data.rows
            }
        } catch (error) {
            throw error
        }
    }

当我传递两个角色id时数据正确的返回
image.png

但是当我只传递一个角色id时,返回的这条信息没有返回该用户的所有角色,有没有什么办法做这个查询!
image.png

回复
阅读 231
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏