関係を自己参照できます。これは単純な有向グラフの例です(別名、ノードは親と複数の子を持つことができます)。
@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[];
}
覚えておくべき重要な注意点は、find*
を使用してDBからオブジェクトを読み取るときに、これらの関係が自動ロードされないことです。 関数。
それらを実際にロードするには、現時点でクエリビルダーを使用してそれらを結合する必要があります。 (複数のレベルに参加できます。)例:
let allServices = await this.repository.createQueryBuilder('category')
.andWhere('category.price IS NULL')
.innerJoinAndSelect('category.children', 'product')
.leftJoinAndSelect('product.children', 'addon')
.getMany();
それらを参照するために異なる名前をどのように使用したかに注意してください(category
、product
、およびaddon
。