Mysql
 sql >> Base de données >  >> RDS >> Mysql

Type de relation ManyToMany auto-référencéORM

Vous pouvez auto-référencer vos relations. Voici un exemple de graphe orienté simple (c'est-à-dire qu'un nœud peut avoir un parent et plusieurs enfants).

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

Une remarque importante à garder à l'esprit est que ces relations ne sont pas chargées automatiquement lors de la lecture d'un objet de la base de données avec find* fonctions.

Pour les charger, vous devez utiliser le générateur de requêtes pour le moment et les rejoindre. (Vous pouvez rejoindre plusieurs niveaux.) Un exemple :

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

Veuillez noter comment j'ai utilisé différents noms pour les référencer (category , product , et addon ).