![](/img/trans.png)
[英]TypeOrm/PostgreSQL createQueryBuilder: select column from joined table
[英]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[];
}
我想將Group
的isOwner
值映射到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.