簡體   English   中英

如何將連接表列映射到 TypeORM 中的實體字段

[英]How to map joined table column to an entity's field in TypeORM

有兩個實體如下:

// user.entity.ts

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

  @Column()
  @RelationId((user: User) => user.group)
  groupId: number;

  @Column()
  fullName: string;

  @Column()
  email: string;

  @Column()
  passwordHash: string;

  @ManyToOne(type => Group, group => group.users)
  @JoinColumn()
  group: Group;

  isOwner: boolean;
}
// group.entity.ts

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

  @Column()
  name: string;

  @Column({ default: false })
  isOwner: boolean;

  @OneToMany(type => User, user => user.group)
  users: User[];
}

我想將GroupisOwner值映射到User isOwner

我試過:

  async findOneById(id: number): Promise<User> {
    return await User.createQueryBuilder('user')
      .leftJoinAndMapOne('user.isOwner', 'user.group', 'group')
      .select(['user.id', 'user.fullName', 'user.email', 'group.isOwner'])
      .getOne();
  }

結果是:

在此處輸入圖片說明

可以通過使用@AfterLoad()或使用 JS 或使用原始查詢來實現。

是否可以在查詢級別使用 orm 來實現?

這樣的事情可以作為解決方案:

  findOneById(id: number): Promise<User> {
    return User.createQueryBuilder('user')
      .leftJoinAndMapOne('user.isOwner', 'user.group', 'group')
      .select(['user.id', 'user.fullName', 'user.email', 'group.isOwner AS user.isOwner']) // or probably 'group.isOwner AS user_isOwner'
      .getOne();
  }

你可以看看這個答案,希望它會有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM