我是TypeOrmNestjs以及Mysql的新手

这是订单实体

@Entity()
export class Order {
    @PrimaryGeneratedColumn()
    id: number;

    @ManyToOne(() => Media, (media) => media.id, { eager: false })
    media: Media


    @Column({ type: 'enum', enum: OrderStatus, default: OrderStatus.WAITING })
    status: OrderStatus

    @ManyToOne(() => User, (user) => user.id)
    @JoinColumn({ name: 'ownerId' })
    owner: User

    @ManyToOne(() => User, (user) => user.id)
    @JoinColumn({ name: 'clientId' })
    client: User

    @Column()
    description: string

    @Column({ nullable: true, default: null })
    score: number | null

    @CreateDateColumn({ type: 'timestamp' })
    createdAt: Date;

    @UpdateDateColumn({ type: 'timestamp' })
    updatedAt: Date

    @DeleteDateColumn()
    deletedAt: Date

    @BeforeUpdate()
    private validateScore() {
        if (this.score !== null && (this.score < 0 || this.score > 100)) {
            throw new Error('Score must be between 0 and 100');
        }
    }
}

这是用户实体

import { Role } from 'src/common/authorization/role.enum';
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ unique: true })
  email: string;

  @Column()
  password: string;

  @Column({ default: Role.User })
  role: Role;

  @Column({ default: null })
  verifiedAt: Date | null

}

这是退回所有订单的服务

  async findAll(role: Role, query: GetOrdersQueryDto) {

    const page = query.page || 1;
    const itemPerPage = query.item_per_page || 10;

    const theQuery = this.orderRepository.createQueryBuilder('order')


    const [data,totalCount]=await theQuery
    .leftJoinAndSelect('order.owner ','user') // error happens here
    .leftJoinAndSelect('order.client','user')
    .orderBy('order.createdAt')
    .skip((page-1)*itemPerPage)
    .take(itemPerPage)
    .getManyAndCount()

    return {
      data,
      pagination: { total_count: totalCount, item_per_page: itemPerPage, page },
    };
  }

问题就在这里,当我想左连接时

.leftJoinAndSelect('order.owner ','user')

我收到错误

未找到与实体中的属性路径所有者的关系。

但正如您在订单实体中看到的,所有者和用户实体之间存在多对一的关系

客户所有者都是用户的外键

很奇怪客户端没有问题

那么,问题是什么?我该如何解决这个问题?


最佳答案
1

您对两个连接使用了相同的别名(用户),而 TypeORM 无法区分这两种关系。要解决这个问题,您需要为每个连接使用不同的别名,leftJoinAndSelect例如:

  .leftJoinAndSelect('order.owner', 'owner')
  .leftJoinAndSelect('order.client', 'client')