Mysql
 sql >> Database >  >> RDS >> Mysql

Tipo di relazione ManyToMany autoreferenzialeORM

Puoi fare riferimento alle tue relazioni. Ecco un esempio di un semplice grafo diretto (ovvero un nodo può avere un genitore e più figli).

@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[];
}

Una nota importante da tenere a mente è che queste relazioni non vengono caricate automaticamente durante la lettura di un oggetto dal DB con find* funzioni.

Per caricarli effettivamente, devi utilizzare il generatore di query al momento e unirti a loro. (Puoi unirti a più livelli.) Un esempio:

let allServices = await this.repository.createQueryBuilder('category')
  .andWhere('category.price IS NULL')
  .innerJoinAndSelect('category.children', 'product')
  .leftJoinAndSelect('product.children', 'addon')
  .getMany();

Nota come ho usato nomi diversi per fare riferimento a loro (category , product e addon ).