Vous pouvez auto-référencer vos relations. Voici un exemple de graphe orienté simple (c'est-à-dire qu'un nœud peut avoir un parent et plusieurs enfants).
@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[];
}
Une remarque importante à garder à l'esprit est que ces relations ne sont pas chargées automatiquement lors de la lecture d'un objet de la base de données avec find*
fonctions.
Pour les charger, vous devez utiliser le générateur de requêtes pour le moment et les rejoindre. (Vous pouvez rejoindre plusieurs niveaux.) Un exemple :
let allServices = await this.repository.createQueryBuilder('category')
.andWhere('category.price IS NULL')
.innerJoinAndSelect('category.children', 'product')
.leftJoinAndSelect('product.children', 'addon')
.getMany();
Veuillez noter comment j'ai utilisé différents noms pour les référencer (category
, product
, et addon
).