Puoi fare riferimento alle tue relazioni. Ecco un esempio di un semplice grafo diretto (ovvero un nodo può avere un genitore e più figli).
@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[];
}
Una nota importante da tenere a mente è che queste relazioni non vengono caricate automaticamente durante la lettura di un oggetto dal DB con find*
funzioni.
Per caricarli effettivamente, devi utilizzare il generatore di query al momento e unirti a loro. (Puoi unirti a più livelli.) Un esempio:
let allServices = await this.repository.createQueryBuilder('category')
.andWhere('category.price IS NULL')
.innerJoinAndSelect('category.children', 'product')
.leftJoinAndSelect('product.children', 'addon')
.getMany();
Nota come ho usato nomi diversi per fare riferimento a loro (category
, product
e addon
).