Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Selbstreferenzierender ManyToMany-BeziehungstypORM

Sie können Ihre Beziehungen selbst referenzieren. Hier ist ein Beispiel für einen einfachen gerichteten Graphen (auch bekannt als ein Knoten kann einen Elternteil und mehrere Kinder haben).

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

Ein wichtiger Hinweis ist, dass diese Relationen nicht automatisch geladen werden, wenn ein Objekt aus der DB mit find* gelesen wird Funktionen.

Um sie tatsächlich zu laden, müssen Sie im Moment den Abfrageersteller verwenden und ihnen beitreten. (Sie können mehreren Ebenen beitreten.) Ein Beispiel:

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

Bitte beachten Sie, dass ich verschiedene Namen verwendet habe, um auf sie zu verweisen (category , product , und addon ).