Můžete se sami řídit svými vztahy. Zde je příklad jednoduchého orientovaného grafu (aka uzel může mít rodiče a více potomků).
@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[];
}
Důležitá poznámka, kterou je třeba mít na paměti, je, že tyto vztahy nejsou automaticky načteny při čtení objektu z DB pomocí find*
funkce.
Chcete-li je skutečně načíst, musíte v tuto chvíli použít nástroj pro tvorbu dotazů a připojit se k nim. (Můžete se připojit k více úrovním.) Příklad:
let allServices = await this.repository.createQueryBuilder('category')
.andWhere('category.price IS NULL')
.innerJoinAndSelect('category.children', 'product')
.leftJoinAndSelect('product.children', 'addon')
.getMany();
Všimněte si prosím, jak jsem na ně použil různá jména (category
, product
a addon
).