我正在寻找一种使用 NestJS 和 TypeORM 来实现函数的方法,它将在 OneToMany 数组中查找特定元素并将该值分配给对象中的另一个字段。
最重要的是:在代码中的单个位置实现。
例如:
实体profile
有一个数组photos
,其中一张照片是个人资料照片。
我想在数组中找到那张照片并将其分配给profilePicture
如果存在,则在每个选择查询上。
typeORM 有没有办法在代码中的一个地方实现它?
@Entity('profile')
export class Profile extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;
@OneToMany(type => Photo, photo => photo.profile)
photos?: Photo[];
profilePicture?: Photo;
}
如果您使用查询生成器,则可以通过使用 leftJoinAndMapOne 来实现。我只是想添加一个例子,但我刚刚发现TypeORM 文档 https://github.com/typeorm/typeorm/blob/master/docs/select-query-builder.md#joining-and-mapping-functionality已经为您的用例提供了一个很好的解决方案:
const user = await createQueryBuilder("user")
.leftJoinAndMapOne("user.profilePhoto", "user.photos", "photo", "photo.isForProfile = TRUE")
.where("user.name = :name", { name: "Timber" })
.getOne();
编辑:或者,您可以使用 Afterload 装饰器在实体中设置配置文件:
@AfterLoad()
private setProfile(): void {
this.photos.forEach((photo) => {
if (photo.isForProfile) {
this.photo = value;
}
});
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)