Du kan själv referera till dina relationer. Här är ett exempel på en enkel riktad graf (aka en nod kan ha en förälder och flera barn).
@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[];
}
En viktig anmärkning att komma ihåg är att dessa relationer inte automatiskt laddas när ett objekt läses från DB med find*
funktioner.
För att faktiskt ladda dem måste du använda frågebyggaren för tillfället och gå med dem. (Du kan gå med på flera nivåer.) Ett exempel:
let allServices = await this.repository.createQueryBuilder('category')
.andWhere('category.price IS NULL')
.innerJoinAndSelect('category.children', 'product')
.leftJoinAndSelect('product.children', 'addon')
.getMany();
Observera hur jag använde olika namn för att referera till dem (category
, product
och addon
).