大家好我试图找到其中包含的所有结果。我尝试过几种方法,但问题无关紧要。它只返回一个空数组
var data = await getRepository(User)
.createQueryBuilder("user")
.where("user.firstName = %:name%", {name: firstName })
.getMany();
和类似的东西
var data = await getRepository(User)
.createQueryBuilder("user")
.where("user.firstName like %:name%", {name: firstName })
.getMany();
但没有任何效果。所有这些都给我一个空数组。有人可以帮我谢谢
答案 0 :(得分:18)
正确的方法是:
enumerate
答案 1 :(得分:2)
TypeORM提供了开箱即用的Like
函数。示例from their docs:
import {Like} from "typeorm";
const loadedPosts = await connection.getRepository(Post).find({
title: Like("%out #%")
});
在您的情况下:
var data = await getRepository(User).find({
name: Like(`%${firstName}%`)
});
答案 2 :(得分:0)
如果您已经使用.find方法来满足存储库需求,则可能不想切换到QueryBuilder。
有一个简单的方法可以使用findConditions实现LIKE过滤器:
this.displayRepository.find({ where: "Display.name LIKE '%someString%'" });
不区分大小写的OR(在postgres中):
this.displayRepository.find({ where: "Display.name ILIKE '%someString%'" });
请记住,这容易受到注入攻击,因此您必须明确保护动态值。
答案 3 :(得分:0)
您还可以使用数据库功能进行串联。例如在postgres中:
var data = await getRepository(User)
.createQueryBuilder("user")
.where("user.firstName like '%' || :name || '%'", {name: firstName })
.getMany();
答案 4 :(得分:0)
使用存储库,我把它放在 where 中,例如:
await this.userRepository.findAndCount({
relations: ['roles', 'company'],
where: `(username like '%${seachValue}%' or firstname like '%${seachValue}%'
or lastname like '%${seachValue}%' or email like '%${seachValue}%')`,
order: {
[sortField]: sortDirection,
},
});
答案 5 :(得分:-1)
var data = await getRepository(User)
.createQueryBuilder("user")
.where("user.firstName ILIKE %q, {q:`%${VALUE_HERE}%` })
.getMany();
这就是我的方法。希望对您有帮助