带有 getOne 的 createQueryBuilder 没有 return @JoinColumns 在 table Typeorm 中
createQueryBuilder with getOne doesn't return @JoinColumns inside table Typeorm
我有一个用nestjs和typeorm写的项目。在我的项目中,我有 tables chat 和 user,所以我想获得 ManyToOne
关系。这里是chat
table
export class Chat extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;
@ManyToOne(() => User, (user) => user.chatsCreater, { nullable: false })
@JoinColumn({ name: 'creatorId' })
creator: User;
@ManyToOne(() => User, (user) => user.chatsCompanion, { nullable: false })
@JoinColumn({ name: 'companionId' })
companion: User;
}
和来自 user
table
的块
...
@OneToMany(() => Chat, (chat) => chat.creator)
chatsCreater: Chat[];
@OneToMany(() => Chat, (chat) => chat.companion)
chatsCompanion: Chat[];
...
当我从聊天中查询数据时,我希望得到 table {id, companionId, creatorI}
的漏洞,而不仅仅是 chat.id
的值。这是我的查询
.createQueryBuilder('chat')
.where('chat.creatorId = :creatorId AND chat.companionId = :companionId', { creatorId, companionId })
.getOne()
结果{id: 1}
所以我想要的是在我从聊天中查询时也获取 companionId 和 creatorId 的值。
如果我将 getOne()
更改为 getRaw()
,我将获得所需的输出。但是在更复杂的查询(具有多个连接)的情况下,getRaw 会变得一团糟,那么有没有办法使用 getOne 获取所有列?
我可以使用 leftJoinAndSelect
.createQueryBuilder('chat')
.leftJoinAndSelect('chat.creator', 'creator')
.leftJoinAndSelect('chat.companion', 'companion')
.where('chat.creatorId = :creatorId AND chat.companionId = :companionId', { creatorId, companionId })
.getOne();
如果不需要 table 洞,也可以使用不带 select 的 leftJoin,然后添加到查询 addSelect(['creator.id','companion.id'])
我有一个用nestjs和typeorm写的项目。在我的项目中,我有 tables chat 和 user,所以我想获得 ManyToOne
关系。这里是chat
table
export class Chat extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;
@ManyToOne(() => User, (user) => user.chatsCreater, { nullable: false })
@JoinColumn({ name: 'creatorId' })
creator: User;
@ManyToOne(() => User, (user) => user.chatsCompanion, { nullable: false })
@JoinColumn({ name: 'companionId' })
companion: User;
}
和来自 user
table
...
@OneToMany(() => Chat, (chat) => chat.creator)
chatsCreater: Chat[];
@OneToMany(() => Chat, (chat) => chat.companion)
chatsCompanion: Chat[];
...
当我从聊天中查询数据时,我希望得到 table {id, companionId, creatorI}
的漏洞,而不仅仅是 chat.id
的值。这是我的查询
.createQueryBuilder('chat')
.where('chat.creatorId = :creatorId AND chat.companionId = :companionId', { creatorId, companionId })
.getOne()
结果{id: 1}
所以我想要的是在我从聊天中查询时也获取 companionId 和 creatorId 的值。
如果我将 getOne()
更改为 getRaw()
,我将获得所需的输出。但是在更复杂的查询(具有多个连接)的情况下,getRaw 会变得一团糟,那么有没有办法使用 getOne 获取所有列?
我可以使用 leftJoinAndSelect
.createQueryBuilder('chat')
.leftJoinAndSelect('chat.creator', 'creator')
.leftJoinAndSelect('chat.companion', 'companion')
.where('chat.creatorId = :creatorId AND chat.companionId = :companionId', { creatorId, companionId })
.getOne();
如果不需要 table 洞,也可以使用不带 select 的 leftJoin,然后添加到查询 addSelect(['creator.id','companion.id'])