Typeorm默认选择关系列

问题描述 投票:0回答:1

我有这些实体:

    @Entity('element')
    export class Element {
      [...]
      
      @ManyToOne(() => User, (user) => user.createdElements)
      createdBy: User;
    }

    @Entity('user')
    export class User {
      [...]
      
      @Column()
      username: string;
    
      @OneToMany(() => Element, (element) => element.createdBy)
      createdElements: Element[];
    }

我想获得

Element
但总是加载“element.user.username”。

this.elementRepository.createQueryBuilder('element')
  .leftJoin('element.user', 'user')
  .addSelect('user.username')
  .getMany()

它确实适用于这样的查询,但是否可以在实体文件中以某种方式描述这一点,默认情况下应选择

user.username

typescript nestjs typeorm
1个回答
1
投票

我不认为你可以加载特定的列,但你可以做的是通过添加 :

来使关系变得急切
@ManyToOne(() => User, (user) => user.createdElements, {
        eager: true,
    }) 

元素将与其用户一起加载
ps:仅适用于查找功能

const elements = await elements Repository.find()

否则,如果您不希望这样,我建议创建一个函数来加载您希望在应用程序中重复使用的特定列:

function loadElements(){
 return this.elementRepository.createQueryBuilder('element')
.leftJoin('element.user', 'user')
.addSelect('user.username')
} 
// than you can use it in your app:
this.loadElements.where('id',1).getMany();
© www.soinside.com 2019 - 2024. All rights reserved.