sql >> Database >  >> RDS >> Mysql

Zelfverwijzend ManyToMany-relatietypeORM

U kunt uw relaties zelf verwijzen. Hier is een voorbeeld van een eenvoudige gerichte graaf (ook bekend als een knoop kan een ouder en meerdere kinderen hebben).

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

Een belangrijke opmerking om in gedachten te houden is dat deze relaties niet automatisch worden geladen bij het lezen van een object uit de DB met find* functies.

Om ze daadwerkelijk te laden, moet je op dit moment de querybuilder gebruiken en eraan deelnemen. (U kunt deelnemen aan meerdere niveaus.) Een voorbeeld:

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

Let op hoe ik verschillende namen heb gebruikt om ernaar te verwijzen (category , product , en addon ).



  1. Wanneer overschakelen naar een grotere RDS-instantie?

  2. Wijzig de tijdzone-offset op een datetimeoffset-waarde in SQL Server (T-SQL)

  3. Een ORDER BY optimaliseren voor een berekende kolom op een MASSIVE MySQL-tabel?

  4. Tabellen samenvoegen met kommawaarden