【问题标题】:Typeorm Query Builder filtering multiple columns with one valueTypeorm 查询生成器用一个值过滤多个列
【发布时间】:2022-07-21 00:01:56
【问题描述】:

我的目标是访问 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

我无法通过电子邮件以外的任何其他方式进行过滤,我认为是因为初始位置,但我不完全确定如何满足这种情况。

如果有人能指出正确的方向,我将不胜感激。

【问题讨论】:

  • 你找到解决办法了吗?

标签: node.js typescript nestjs typeorm


【解决方案1】:

我正在寻求实现类似的东西,我在另一个 Stackoverflow Question 中找到了答案

可以使用TypeORM docs 中描述的简单 typeorm .find() 选项来使用 OR 子句。 要使用 OR 运算符进行查询,您需要使用条件数组而不是对象。

let users = await user.find({
    where: [
        { email: Like(%${query}%) },
        { skillsets: Like(%${query}%) },
        { username: Like(%${query}%) }
    ]
});

【讨论】:

    猜你喜欢
    • 2020-07-27
    • 2014-04-09
    • 2021-08-10
    • 2018-11-27
    • 2019-05-26
    • 2020-07-01
    • 2013-01-01
    • 2023-03-23
    • 2021-09-07
    相关资源
    最近更新 更多