TypeOrm 只检索 leftJoinAndSelect 中的一个 Field

TypeOrm only retrieve one Field in leftJoinAndSelect

我已经阅读了 typeorm 文档,但没有找到我的问题的解决方案。 在论坛中,有些人没有描述 suquery,但它不适用于 leftJoinAndSelect。 如果有人可以帮助非常感谢 我有文章实体

@Entity('article')
export class Article extends BaseEntity{
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  title: string;

  @Column({type: "longtext"}) 
  content: string;

  @Column({ default: false })
  is_published: boolean;
  
  @CreateDateColumn({ type: "timestamp", default: () => 'CURRENT_TIMESTAMP' })
  createDateTime: Date;

  @ManyToOne(type => User, user => user.articles)
  user:User;

 
}

和用户实体

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

  @Column()
  username: string;

  @Column() 
  password: string;

  @Column({ default: true })
  isActive: boolean;

  @Column({default: 'contrinutor'})
  role: string

  @OneToMany(()=> Article, article => article.user)
    articles: Article[];
}

我想获取一篇文章并将用户关联到该文章,但只检索文章和用户名的数据,而不是所有信息数据。

目前我试过这个:


const article = await this.articleRepository
                            .createQueryBuilder('article')
                            .where({id: id})
                            .leftJoinAndSelect("article.user","user")
                            .getOne();

结果:

{
    "id": 1,
    "title": "My super Title",
    "content": "My super content",
    "is_published": false,
    "createDateTime": "2021-01-21T13:37:15.894Z",
    "user": {
        "id": 1,
        "username": "admin",
        "password": "admin",
        "isActive": true,
        "role": "contributor"
    }
}

我希望:

{
    "id": 1,
    "title": "My super Title",
    "content": "My super content",
    "is_published": false,
    "createDateTime": "2021-01-21T13:37:15.894Z",
    "user": {
        "username": "admin",
        "role": "contrinutor"
    }
}

感谢帮助

您可以使用 selectleftJoinAddSelect 来存档结果:

const article = await this.articleRepository
                        .createQueryBuilder('article')
                        .where({id: id})
                        .leftJoin("article.user","user")
                        .select(['article'])
                        .addSelect(['user.username','user.role'])
                        .getOne();