【问题标题】:How to map joined table column to an entity's field in TypeORM如何将连接表列映射到 TypeORM 中的实体字段
【发布时间】:2021-01-16 09:53:21
【问题描述】:

有两个实体如下:

// 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 值映射到UserisOwner

我试过了:

  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 来实现?

【问题讨论】:

    标签: postgresql orm nestjs typeorm


    【解决方案1】:

    类似的方法可以作为解决方案:

      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();
      }
    

    你可以看看this answer,希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2018-12-09
      • 2019-08-10
      • 2019-10-12
      • 1970-01-01
      • 2019-10-28
      • 2021-07-23
      • 2020-10-24
      • 2017-10-16
      • 2017-03-13
      相关资源
      最近更新 更多