sql >> Base de Datos >  >> RDS >> Mysql

Tipo de relación ManyToMany autorreferencialORM

Puedes autorreferenciar tus relaciones. Aquí hay un ejemplo de un gráfico dirigido simple (también conocido como un nodo puede tener un padre y varios hijos).

@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 a tener en cuenta es que estas relaciones no se cargan automáticamente al leer un objeto de la base de datos con find* funciones.

Para cargarlos realmente, debe usar el generador de consultas en este momento y unirse a ellos. (Puede unirse a varios niveles). Un ejemplo:

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

Tenga en cuenta cómo utilicé diferentes nombres para hacer referencia a ellos (category , product y addon ).