Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Tipo de relacionamento muitos para muitos de autorreferência ORM


Você pode auto-referenciar suas relações. Aqui está um exemplo de um gráfico direcionado simples (também conhecido como um nó pode ter um pai e vários filhos).
@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[];
}

Uma observação importante a ter em mente é que essas relações não são carregadas automaticamente ao ler um objeto do banco de dados com find* funções.

Para realmente carregá-los, você precisa usar o construtor de consultas no momento e juntá-los. (Você pode ingressar em vários níveis.) Um exemplo:
let allServices = await this.repository.createQueryBuilder('category')
  .andWhere('category.price IS NULL')
  .innerJoinAndSelect('category.children', 'product')
  .leftJoinAndSelect('product.children', 'addon')
  .getMany();

Observe como usei nomes diferentes para referenciá-los (category , product , e addon ).