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

如何在TypeORM中将关联表字段合并到同一条查询结果中

实现一对一关联字段扁平化返回

假设你使用TypeORM、Prisma这类ORM框架,以下是几种常见的实现方案:

方案一:查询构造器直接拼接字段(以TypeORM为例)

在SQL层面关联表并指定返回字段,通过getRawMany()直接获取扁平化结构:

const menus = await getRepository(Menu)
  .createQueryBuilder('menu')
  .leftJoinAndSelect('menu.Page', 'page')
  .select([
    'menu.MenuID',
    'menu.MenuName',
    'page.PageName'
  ])
  .getRawMany();

方案二:实体类添加虚拟字段配合查询(TypeORM)

在Menu实体中新增不映射数据库的虚拟字段,查询时手动关联并选择对应字段:

// Menu实体类
@Entity()
export class Menu {
  @PrimaryColumn()
  MenuID: string;

  @Column()
  MenuName: string;

  @OneToOne(() => Page)
  @JoinColumn()
  Page: Page;

  // 虚拟字段,不映射数据库
  @Column({ select: false })
  PageName: string;
}

查询代码:

const menus = await getRepository(Menu)
  .createQueryBuilder('menu')
  .leftJoin('menu.Page', 'page')
  .addSelect('page.PageName')
  .getMany();

方案三:Prisma框架处理方式

先查询嵌套结构,再手动转换为扁平化格式:

const menus = await prisma.menu.findMany({
  select: {
    MenuID: true,
    MenuName: true,
    Page: {
      select: {
        PageName: true
      }
    }
  }
})

// 转换为目标格式
const flattenedMenus = menus.map(menu => ({
  ...menu,
  PageName: menu.Page?.PageName,
  Page: undefined
}));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 14:24:19