Você pode auto-referenciar suas relações. Aqui está um exemplo de um gráfico direcionado simples (também conhecido como um nó pode ter um pai e vários filhos).
@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[];
}
Uma observação importante a ter em mente é que essas relações não são carregadas automaticamente ao ler um objeto do banco de dados com
find*
funções. Para realmente carregá-los, você precisa usar o construtor de consultas no momento e juntá-los. (Você pode ingressar em vários níveis.) Um exemplo:
let allServices = await this.repository.createQueryBuilder('category')
.andWhere('category.price IS NULL')
.innerJoinAndSelect('category.children', 'product')
.leftJoinAndSelect('product.children', 'addon')
.getMany();
Observe como usei nomes diferentes para referenciá-los (
category
, product
, e addon
).