我有这些实体:
@Entity('element')
export class Element {
[...]
@ManyToOne(() => User, (user) => user.createdElements)
createdBy: User;
}
@Entity('user')
export class User {
[...]
@Column()
username: string;
@OneToMany(() => Element, (element) => element.createdBy)
createdElements: Element[];
}
我想获得
Element
但总是加载“element.user.username”。
this.elementRepository.createQueryBuilder('element')
.leftJoin('element.user', 'user')
.addSelect('user.username')
.getMany()
它确实适用于这样的查询,但是否可以在实体文件中以某种方式描述这一点,默认情况下应选择
user.username
?
我不认为你可以加载特定的列,但你可以做的是通过添加 :
来使关系变得急切@ManyToOne(() => User, (user) => user.createdElements, {
eager: true,
})
元素将与其用户一起加载
ps:仅适用于查找功能
const elements = await elements Repository.find()
否则,如果您不希望这样,我建议创建一个函数来加载您希望在应用程序中重复使用的特定列:
function loadElements(){
return this.elementRepository.createQueryBuilder('element')
.leftJoin('element.user', 'user')
.addSelect('user.username')
}
// than you can use it in your app:
this.loadElements.where('id',1).getMany();