Sequelize嵌套关联查询:如何获取三张关联表的全部数据?
获取关联表的全部关联数据(Sequelize 实现)
针对你定义的三级关联表结构(X→Y→Z,或organisation→application→member),可以通过Sequelize的嵌套include选项一次性查询所有层级的关联数据,以下是具体实现方式:
从顶层表查询完整关联数据
如果要从最上层的X(或organisation)出发,获取所有关联的Y(或application)及Z(或member)数据,写法如下:
通用X/Y/Z示例
const allXWithRelations = await X.findAll({ include: [ { model: Y, include: [Z] // 嵌套包含Z表的关联数据 } ] });
对应organisation/application/member示例
const allOrgsWithAppsAndMembers = await db.organisation.findAll({ include: [ { model: db.application, include: [db.member] } ] });
查询结果里,每个顶层对象(X或organisation)会包含一个对应关联表的数组(比如Ys或applications),数组里的每个Y(或application)对象又会包含其关联的Z(或member)数组(比如Zs或members),完整覆盖三级关联数据。
从底层表反向查询完整关联数据
如果需要从最底层的Z(或member)出发,反向获取关联的Y(或application)及X(或organisation)数据,写法类似:
通用X/Y/Z示例
const allZWithRelations = await Z.findAll({ include: [ { model: Y, include: [X] // 反向包含X表数据 } ] });
对应organisation/application/member示例
const allMembersWithAppsAndOrgs = await db.member.findAll({ include: [ { model: db.application, include: [db.organisation] } ] });
可选:添加筛选条件
如果不需要全量数据,还可以在查询中加入where条件筛选特定记录,比如只查询ID为1的X及其关联数据:
const targetXWithRelations = await X.findAll({ where: { id: 1 }, include: [ { model: Y, include: [Z] } ] });
内容的提问来源于stack exchange,提问作者Janaki Raman
相关产品推荐
相关产品推荐

