我是TypeOrm和Nestjs以及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')
|
|