如何在 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)
这可以扩展到包括关系或排序,并且它不必一次排他,您可以在同一个查询中过滤、排序和搜索所有内容
我有一个 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)
这可以扩展到包括关系或排序,并且它不必一次排他,您可以在同一个查询中过滤、排序和搜索所有内容