U kunt uw relaties zelf verwijzen. Hier is een voorbeeld van een eenvoudige gerichte graaf (ook bekend als een knoop kan een ouder en meerdere kinderen hebben).
@Entity()
export class Service extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;
@Column()
@Index({ unique: true })
title: string;
@ManyToOne(type => Service, service => service.children)
parent: Service;
@OneToMany(type => Service, service => service.parent)
children: Service[];
}
Een belangrijke opmerking om in gedachten te houden is dat deze relaties niet automatisch worden geladen bij het lezen van een object uit de DB met find*
functies.
Om ze daadwerkelijk te laden, moet je op dit moment de querybuilder gebruiken en eraan deelnemen. (U kunt deelnemen aan meerdere niveaus.) Een voorbeeld:
let allServices = await this.repository.createQueryBuilder('category')
.andWhere('category.price IS NULL')
.innerJoinAndSelect('category.children', 'product')
.leftJoinAndSelect('product.children', 'addon')
.getMany();
Let op hoe ik verschillende namen heb gebruikt om ernaar te verwijzen (category
, product
, en addon
).