从子关系中选择列在 typeorm 中不起作用

Jos*_*eph 5 javascript node.js typeorm nestjs

我有一个OrderUser实体

命令

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

    @Column('enum', {enum: OrderStatus, default: OrderStatus.NEW})
    status: OrderStatus
    
    @Column('float')
    amount: number

    @Column('float')
    fees: number

    @ManyToOne(() => User, (user) => user.orders)
    user: User;
    
    @OneToMany(() => OrderToProduct, orderToProduct => orderToProduct.order, {
        cascade: true,
    })
    products: OrderToProduct[]

    @CreateDateColumn()
    createdAt: Date = new Date();

    @UpdateDateColumn()
    updatedAt: Date;
}
Run Code Online (Sandbox Code Playgroud)

用户

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

    @Column({length: 255})
    name: string;
    
    @Column({length: 255, unique: true})
    email: string;

    @Column({length: 255})
    password: string;   

    @CreateDateColumn()
    createdAt: Date = new Date();
    
    @OneToMany(() => Order, (order) => order.user)
    orders: Order[];

    @UpdateDateColumn()
    updatedAt: Date;

    @OneToMany(() => Product, (product) => product.user)
    products: Product[]

}
Run Code Online (Sandbox Code Playgroud)

我想要的只是检索用户的订单,name我尝试的就是这样

this.orderRepository.find({
    relations: {
        user: {
            id: true,
            name: true
        }
    },
    where: {
        user: {
            id: user.id
        }
    }
})
Run Code Online (Sandbox Code Playgroud)

但它返回一个错误

EntityPropertyNotFoundError:在“用户”中找不到属性“id”。确保您的查询正确。

但是如果我尝试像这样获取用户的所有对象,它就可以正常工作

relations: {
   user: true
},
Run Code Online (Sandbox Code Playgroud)

lin*_*usw 8

typeorm 期望 id 和 name 是相关实体。由于它们是常规的原始列,因此它们应该位于选择选项中。

relations: {
    user:true
},
where: {
    user: {
        id: user.id
    }
},
select: {
  user: {
    id:true,
    name: true
  }
// your other columns from order entity.
}
Run Code Online (Sandbox Code Playgroud)