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

Sequelize内连接查询如何将关联表字段平级返回而非嵌套

问题:Sequelize内连接查询如何将关联表字段与主表字段平级返回

我是Sequelize新手,目前在做内连接查询,需要从主表和关联表中选择指定字段。现有查询代码如下:

const paramPostgres: QueryBuilder = {
  raw: false,
  nest: true,
  include: [{
      model: UserAccountDeRepository.getInstance().model, as: "userAccountTableAlias",
      attributes: ["account"],
      required: true
  }],
  attributes: ["is_archived", "status", "udiId"],
  where: {
    '$userAccountTableAlias.user$': usernames
  }
}

当前返回结果中,关联表的account字段嵌套在userAccountTableAlias别名对象下:

[{"is_archived":false,"status":"COMPLETED","udiId":"9e8350f1-fab0-4861-96ae-1268118c49a3","userAccountTableAlias":{"account":"133b5f93-916b-46c1-b429-6c071c752097"}}]

我期望将account字段与主表字段平级返回,格式如下:

[{"is_archived":false,"status":"COMPLETED","udiId":"9e8350f1-fab0-4861-96ae-1268118c49a3","account":"133b5f93-916b-46c1-b429-6c071c752097"}]

请问如何实现该需求?


解决方案

有两种常用方法可以实现关联表字段与主表字段平级返回:

方法一:在主表attributes中直接指定关联表字段(推荐)

修改attributes配置,用数组形式包含主表字段和关联表的account字段,同时给关联表字段起别名,就能让它和主表字段平级。注意要把关联表的attributes设为空数组,避免返回嵌套对象:

const paramPostgres: QueryBuilder = {
  raw: false,
  nest: true,
  include: [{
      model: UserAccountDeRepository.getInstance().model, as: "userAccountTableAlias",
      attributes: [], // 空数组避免返回嵌套对象
      required: true
  }],
  attributes: [
    "is_archived", 
    "status", 
    "udiId",
    // 指定关联表的account字段,并重命名为account
    [Sequelize.col('userAccountTableAlias.account'), 'account']
  ],
  where: {
    '$userAccountTableAlias.user$': usernames
  }
}

确保项目中已正确导入Sequelize对象或对应的实例。

方法二:开启raw: true并手动指定字段

开启raw: true后,Sequelize会返回原始查询结果,此时通过字段别名即可实现平级:

const paramPostgres: QueryBuilder = {
  raw: true,
  nest: false, // 关闭嵌套
  include: [{
      model: UserAccountDeRepository.getInstance().model, as: "userAccountTableAlias",
      attributes: [],
      required: true
  }],
  attributes: [
    "is_archived", 
    "status", 
    "udiId",
    ['userAccountTableAlias.account', 'account']
  ],
  where: {
    '$userAccountTableAlias.user$': usernames
  }
}

这种方式返回的结果直接是平级结构,无需额外处理。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:25:17