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

TypeORM(MySQL)查询发票数据时如何通过订单外键获取关联用户数据

报错原因

你遇到的报错核心是Order实体类中未正确配置名为user的关联属性,或者关联属性名拼写与你查询时写的order.user不匹配。

方案一:配置实体关联(推荐)

将三张表的关联配置和以下示例对齐即可:

  1. User 实体配置
// user.entity.ts
import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from 'typeorm';
import { Order } from './order.entity';

@Entity('users')
export class User {
  @PrimaryGeneratedColumn()
  id: number;
  // 其余用户字段省略

  @OneToMany(() => Order, order => order.user)
  orders: Order[];
}
  1. Order 实体配置
// order.entity.ts
import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, OneToMany, JoinColumn } from 'typeorm';
import { User } from './user.entity';
import { Invoice } from './invoice.entity';

@Entity('orders')
export class Order {
  @PrimaryGeneratedColumn()
  id: number;
  // 其余订单字段省略

  // 必须存在user属性,关联User实体
  @ManyToOne(() => User, user => user.orders)
  @JoinColumn({ name: 'user_id' }) // name值对应数据库中orders表关联users表的外键字段名
  user: User;

  @OneToMany(() => Invoice, invoice => invoice.order)
  invoices: Invoice[];
}
  1. Invoice 实体配置
// invoice.entity.ts
import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, JoinColumn } from 'typeorm';
import { Order } from './order.entity';

@Entity('invoices')
export class Invoice {
  @PrimaryGeneratedColumn()
  id: number;
  // 其余发票字段省略

  @ManyToOne(() => Order, order => order.invoices)
  @JoinColumn({ name: 'order_id' }) // name值对应数据库中invoices表关联orders表的外键字段名
  order: Order;
}

配置完成后,你原来写的查询代码可以直接正常运行,能同时拿到发票、订单、对应用户数据:

const query = this.createQueryBuilder('invoice');
query.innerJoinAndSelect('invoice.order', 'order');
query.innerJoinAndSelect('order.user', 'user');
// 后续执行getMany/getOne即可
方案二:手动关联表(临时查询用,无需调整实体配置)

如果不想修改实体配置,可以手动指定关联条件完成查询:

const invoices = await this.createQueryBuilder('invoice')
  .innerJoinAndSelect('invoice.order', 'order')
  // 手动关联users表,指定关联条件
  .innerJoinAndSelect('users', 'user', 'user.id = order.user_id')
  .getMany();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:06:03