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
La bonne façon est:
var data = await getRepository(User)
.createQueryBuilder("user")
.where("user.firstName like :name", {name: '%' + firstName + '%' })
.getMany();
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}%`)
});
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.
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();