Sie können Ihre Beziehungen selbst referenzieren. Hier ist ein Beispiel für einen einfachen gerichteten Graphen (auch bekannt als ein Knoten kann einen Elternteil und mehrere Kinder haben).
@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[];
}
Ein wichtiger Hinweis ist, dass diese Relationen nicht automatisch geladen werden, wenn ein Objekt aus der DB mit find*
gelesen wird Funktionen.
Um sie tatsächlich zu laden, müssen Sie im Moment den Abfrageersteller verwenden und ihnen beitreten. (Sie können mehreren Ebenen beitreten.) Ein Beispiel:
let allServices = await this.repository.createQueryBuilder('category')
.andWhere('category.price IS NULL')
.innerJoinAndSelect('category.children', 'product')
.leftJoinAndSelect('product.children', 'addon')
.getMany();
Bitte beachten Sie, dass ich verschiedene Namen verwendet habe, um auf sie zu verweisen (category
, product
, und addon
).