我的目标是命中api端点,只传递一个查询变量,并尝试基于单个变量过滤掉任何列。
我在数据库中有多个用户,例如:
{
id: 1,
email: 'test+1@test.com',
username: 'test',
phone_number: '+651231231',
skillsets: 'Drawing, cooking',
hobby: 'Sleeping',
},
{
id: 2,
email: 'test+2@test.com',
username: 'test 2',
phone_number: '+6512312311231',
skillsets: 'Drawing, cooking',
hobby: 'Drawing',
}
我的职能/查询
let users = this.repo.createQueryBuilder('user');
if (query && query !== '') {
users = users
.where('user.email like :email', { email: `%${query}%` })
.orWhere('user.username like :username', {
username: `%${query}%`,
})
.orWhere('user.phone_number like :phone_number', {
phone_number: `%${query}%`,
})
.orWhere('user.skillsets like :skillsets', {
phone_number: `%${query}%`,
})
.orWhere('user.hobby like :hobby', { hobby: `%${query}%` });
}
return users.getMany();
我的api端点应该类似于
/api/users?query=Sleeping
我不能过滤除电子邮件以外的任何其他东西,我认为是因为最初的地方,但我不完全确定如何迎合这种情况。
如果有人能给我指出正确的方向,我很感激。
3条答案
按热度按时间beq87vna1#
我希望实现类似的功能,并在另一个Stackoverflow Question中找到了答案
可以使用简单的typeorm.find()选项来使用OR子句,如TypeORM docs中所述。要使用OR运算符进行查询,您需要使用条件数组而不是对象。
nszi6y052#
您可以尝试类似的方法。只需添加其他列。
p4tfgftt3#
您可以使用查询生成器中的
setParameter
函数,并在传递参数键的任何地方使用该值。因此,您可以像这样改进代码:希望这对你有帮助。