当对象值具有不同类型时,通过多个查询参数过滤数据

凯维拉

几天来,我一直在努力让这件事发挥作用,我觉得我有这些东西,但我不知道我错过了什么。

当我的对象进入我的服务时,它看起来像这样:

GetAllDataFilterDto {
  orgId: 12345,
  status: [ 'approved', 'pending' ],
}

我正在使用 typeorm,这是我的查询:

  protected getAll(filter: GetAllDataFilter): SelectQueryBuilder<EntityName> {
    const qb = Repository<EntityName>
      .createQueryBuilder('entityName')
      .select([
        'entityName.id',
        'entityName.status',
        'entityName.orgId',
      ])
      .groupBy('entityName.id')
      .where(this.getFilterConditions(filter));

    return qb;
  }

我的查询使用 getMany() 但在不同的文件中,这就是为什么它不包含在此函数中。

这是我遇到问题的地方,我当前的过滤器功能如下所示:

  protected getFilterConditions(filter: GetAllDataFilter) {
    return _.pickBy(filter, (value, key) => value !== undefined && this.entityProperties.has(key));
  }

entityProperties 是一个如下所示的集合:

Set {
'id',
'status',
'orgId'
}

目前,此过滤器适用于数字,如果我的数组只有一个值,但是当我添加两个值时,它会返回错误

trace: QueryFailedError: Operand should contain 1 column(s)

我的最终目标是过滤我返回的数据,即使有可选参数,所以将返回所有已批准或待处理的状态列,但我仍然需要能够同时按 orgId 过滤。

请让我知道是否还有更多我应该包含的内容,谢谢。

wald3

我认为问题可能出.where在您queryBuilder的 1 个参数上(换句话说,仅检查 1 个字段的条件),然后您可以在另外.andWhere1 个参数上添加添加过滤器。

从文档

对于单一.where条件:

添加 WHERE 表达式很简单:

createQueryBuilder("user").where("user.name = :name", { name: "Timber" })

对于多个.where条件:

您可以将 AND 添加到现有的 WHERE 表达式中:

createQueryBuilder("user")
    .where("user.firstName = :firstName", { firstName: "Timber" })
    .andWhere("user.lastName = :lastName", { lastName: "Saw" })

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

基于具有多个值的参数过滤 SQL 查询

具有不同类型的多个参数的Dapper更新查询

JS通过多个参数过滤

通过多个可选参数过滤API

查询具有不同类型数据的PostgreSQL JSONB列

具有2种不同类型的对象数据

通过多个属性过滤具有嵌套对象的对象数组

ASP.NET MVC。PagedList通过多个参数过滤

MVC:使用以下代码通过多个参数过滤表

Oracle NoSQL 数据库 SQL 查询如何处理具有不同类型值的字段的 JSON 文档?

当将具有不同值的相同类对象作为数据源传递时,为什么不重新渲染视图

Scala:具有相同类的对象具有不同的类型?

使用多个参数过滤 JSON 对象

按多个参数过滤对象数组

传递具有不同数据类型的多个参数:Flutter

当对象可以具有不同类型时如何按键对对象数组进行分组

通过多个属性和值过滤对象数组

具有不同类型的模板非类型参数

使用元组通过map分配数组值时,参数过多

C#JSON-序列化具有相同属性的不同类型的多个对象

在SQL查询中,如何通过标识将具有不同类型的表的所有列及其值连接起来?

如何在C ++中处理具有多个不同类型的数据成员的类?

数据从宽格式到长格式,具有多个不同类型的重复列

通过不同类型的引用传递参数时如何打字

如何在Typescript中正确定义具有不同类型的值的对象

相同类型/类的对象是否可能具有不同的数据属性?

通过值计数过滤数据帧

具有多个相同类型的值对象的聚合根问题

具有不同类型的可变参数的宏