javascript - Finns det ett elegant sätt att använda TypeORM för att hitta en post i en array av OneToMany-relation och tilldela den till ett annat fält i entiteten?
Jag letar efter ett sätt att implementera en funktion, med NestJS och TypeORM, som kommer att hitta ett specifikt element i en OneToMany-array och tilldela det värdet till ett annat fält i objektet. Och det viktigaste: implementerat på ett ställe i koden.
Till exempel:
Entiteten profile har en array av photos, en av bilderna är profilbilden. Jag skulle vilja hitta den bilden i arrayen och tilldela den till profilePicture om den finns, vid varje select-fråga. Finns det ett sätt i TypeORM att implementera det på ett ställe i koden?
@Entity('profile')
export class Profile extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;
@OneToMany(type => Photo, photo => photo.profile)
photos?: Photo[];
profilePicture?: Photo;
}
Svar #1
Om du använder frågebyggaren kan du uppnå det genom att använda leftJoinAndMapOne. Jag ville bara lägga till ett exempel, men jag upptäckte precis att TypeORM-dokumentationen redan har en bra lösning för ditt användningsfall:
const user = await createQueryBuilder("user")
.leftJoinAndMapOne("user.profilePhoto", "user.photos", "photo", "photo.isForProfile = TRUE")
.where("user.name = :name", { name: "Timber" })
.getOne();
Redigera: Alternativt kan du ställa in profilen i din entitet med hjälp av Afterload-dekoratorn:
@AfterLoad()
private setProfile(): void {
this.photos.forEach((photo) => {
if (photo.isForProfile) {
this.photo = value;
}
});
}
