web-dev-qa-db-fra.com

Comment effectuer un typeorm de requête similaire

Bonjour les gars, j'essaie de trouver tous les résultats qui ont un en eux. J'ai essayé plusieurs façons, mais le problème est que rien ne fonctionne. Il retourne juste un tableau vide

  var data = await  getRepository(User)
                        .createQueryBuilder("user")
                        .where("user.firstName = %:name%", {name: firstName })
                .getMany();

et quelque chose comme ça

 var data = await  getRepository(User)
                            .createQueryBuilder("user")
                            .where("user.firstName like %:name%", {name: firstName })
                    .getMany();

mais rien ne fonctionne. Tous ces éléments me renvoient un tableau vide. Quelqu'un peut-il m'aider merci

9
Gardezi

La bonne façon est:

 var data = await getRepository(User)
                  .createQueryBuilder("user")
                  .where("user.firstName like :name", {name: '%' + firstName + '%' })
                  .getMany();
20
pleerock

TypeORM fournit une fonction prête à l'emploi Like. Exemple à partir de leurs documents:

import {Like} from "typeorm";

const loadedPosts = await connection.getRepository(Post).find({
    title: Like("%out #%")
});

dans ton cas:

var data = await getRepository(User).find({
    name: Like(`%${firstName}%`)
});
10
Gabriel Lupu

Si vous avez déjà utilisé des méthodes .find pour prendre en charge vos besoins de référentiel, vous ne souhaiterez peut-être pas passer à QueryBuilder.

Il existe un moyen simple d'implémenter un filtre LIKE à l'aide de findConditions:

this.displayRepository.find({ where: "Display.name LIKE '%someString%'" });

OU pour insensible à la casse (en postgres):

this.displayRepository.find({ where: "Display.name ILIKE '%someString%'" });

Gardez à l'esprit que cela est susceptible aux attaques par injection, vous devez donc protéger explicitement la valeur dynamique.

0
GeorgiG

Vous pouvez également utiliser la fonction de base de données pour la concaténation. En postgres par exemple:

 var data = await getRepository(User)
              .createQueryBuilder("user")
              .where("user.firstName like '%' || :name || '%'", {name: firstName })
              .getMany();
0
Carlos Júlio