Możesz odnieść się do swoich relacji. Oto przykład prostego grafu skierowanego (czyli węzeł może mieć rodzica i wiele dzieci).
@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[];
}
Ważną uwagą, o której należy pamiętać, jest to, że te relacje nie są automatycznie ładowane podczas odczytywania obiektu z bazy danych za pomocą find*
funkcje.
Aby faktycznie je załadować, musisz w tym momencie użyć kreatora zapytań i dołączyć do nich. (Możesz dołączyć do wielu poziomów.) Przykład:
let allServices = await this.repository.createQueryBuilder('category')
.andWhere('category.price IS NULL')
.innerJoinAndSelect('category.children', 'product')
.leftJoinAndSelect('product.children', 'addon')
.getMany();
Zwróć uwagę, w jaki sposób użyłem różnych nazw, aby się do nich odnieść (category
, product
i addon
).