如何在 objection.js 中添加动态 Where 查询?

How to add dynamic Where queries in objection.js?

我有一个 table,它有一个全局搜索栏,需要触发搜索所有字段,如名字、姓氏、电子邮件和角色。

还有一个动态过滤器,可以有一个或多个过滤器,如“firstName”or/And“lastName”

显然它们需要分页。

对于分页我可以使用Model.query().page(1, 10)

但是如何提供搜索或过滤。假设在给定时间仅搜索或过滤处于活动状态。

使用 LIKE 搜索和过滤。如何动态地执行此操作。

异议允许您modify查询:

let filtersArr = [.. build your filters]

await YourModel
.query()
.modify((queryBuilder) => {
    if (hasFilters) {
        filtersArr.forEach(({criteria, value}) => {
            queryBuilder.where(criteria, value)
        })
    }

    if (hasQ) {
        queryBuilder.where('name', 'ilike', `%${q}%`)
    }
  })
 .page(page, paginate)

这可以扩展到包括关系或排序,并且它不必一次排他,您可以在同一个查询中过滤、排序和搜索所有内容