Comment rechercher un mot dans une colonne de 2 référentiels différents en utilisant une seule requête (MySQL avec TYPEORM et Nestjs)
P粉122932466
P粉122932466 2024-02-26 15:52:00
0
1
286

J'utilise MySQL et Typeorm dans la dernière version de nestjs et j'ai les entités suivantes :

shop.entity.ts :

@Entity()
export class Shop {
  @PrimaryGeneratedColumn("uuid")
  id: string;

  @Column({ unique: true, nullable: false })
  name: string;

  @Column({ nullable: true })
  description: string;

  @Column({ default: "" })
  image_url: string;

  @Column({ default: true })
  is_active: boolean;

  @Column({ default: false })
  is_special: boolean;

  @Column({ nullable: false, default: () => "CURRENT_TIMESTAMP" })
  created_at: Date;
}

offer.entity.ts

@Entity()
export class Offer {
  @PrimaryGeneratedColumn("uuid")
  id: string;

  @Column({ nullable: false })
  name: string;

  @Column({ nullable: false })
  fabric: string;

  @Column({ nullable: false })
  code: string;

  @Column({ nullable: false })
  start_date: Date;

  @Column({ nullable: false })
  end_date: Date;

  @Column({ default: "" })
  description: string;

  @Column({ nullable: false, default: () => "CURRENT_TIMESTAMP" })
  created_at: Date;
}

shop.service.ts Filtrer la requête

async filter(filter: FilterShopDto) {
const queryBuilder = this.shopRepository
          .createQueryBuilder("shop")
          .where(
            `shop.description LIKE :description`,
            {
              description: filter.description ? `%${filter.description}%` : "%",
            },
          )
          .orderBy("shop.created_at", "DESC")
          .skip(filter.skip)
          .take(filter.take)
}

offre.service.ts Filtre de devis

async filter(filter: FilterOfferDto) {
const queryBuilder = this.offerRepository
          .createQueryBuilder("offer")
          .where(
            " offer.description LIKE :description",
            {
              description: filter.description ? `%${filter.description}%` : "%", 
            },
          )
          .orderBy(
            "offer.created_at",
            "DESC",
          )
          .skip(filter.skip)
          .take(filter.take)
}

Chaque requête fonctionne bien, mais ce que je veux faire, c'est combiner ces deux requêtes en une seule requête afin de pouvoir obtenir les résultats de la recherche du magasin, proposer et trier les enregistrements, puis appliquer l'option Ignorer et les accepter. Y a-t-il un moyen de le faire ?

P粉122932466
P粉122932466

répondre à tous(1)
P粉410239819

TypeORM vous permet d'utiliser n'importe quelle requête de votre choix. Utilisez entityManager.query() voici la documentation. p>

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!