@adonis-agora/filter
AdonisJS 的服务器端查询过滤、排序和页码。 解析
Spatie/JSON:API 查询 @adonis-agora/filter-client 建造者发射,应用到
通过允许列表进行 Lucid 查询,并解析偏移或密钥集( cursor)
帕吉纳.
import { parseFilterRequest, applyFilter } from '@adonis-agora/filter'
const input = parseFilterRequest(ctx.request.qs())
const query = User.query()
const { page, size } = applyFilter(query, input, {
allowed: ['name', 'email', 'age'],
searchable: ['name', 'email'],
})
return query.paginate(page, size)
可连锁宏( 可选)
登记 FilterProvider 获得方法调用形式
applyFilterFromRequest 在任何Lucid查询构建器上——相同的操作,但是
可链:
// adonisrc.ts → providers
() => import('@adonis-agora/filter/filter_provider')
// filter + sort + search, then keep chaining:
const rows = await User.query()
.where('tenantId', tenant.id)
.applyFilterFromRequest(userFilter, ctx)
.orderBy('createdAt', 'desc')
// filter + paginate in one terminal call (returns Lucid's paginator):
const page = await User.query().filterPaginate(userFilter, ctx)
applyFilterFromRequest 返回查询(已解析但未应用);
filterPaginate 用解析的值页,返回了Lucid的活化器——它
首先读取页面并跳过 COUNT(*) 当页回短。 免费
函数工作时没有提供者——宏只添加可连锁糖,所以
@adonisjs/lucid 保持可选的对等点.
运算符:等同/非等同,包含/iContains/startsWith/endsWith,gt/gte/lt/lte,
在/不在Between之间,在/不在/Is AnyOf,是Null/isNotNull/isEmpty/isNotEmpty,加
和/或组成。 这个 allowed编号 :sortable编号 :searchable 列表为安全
边界。 路西德捆绑是结构性的(QueryBuilderLike因此,任何 Lucid 查询
建设者工程和适配器可进行单位测试.
清单
@adonis-agora/filter/in-memory 运行一个普通阵列的相同输入——a
记忆 QueryBuilderLike 跑步者像路西德的查询:
import { defineCollection, filterInMemory } from '@adonis-agora/filter/in-memory'
const users = defineCollection<UserRow>({
fields: { name: 'string', age: 'number', fullName: { type: 'string', get: (u) => u.first + ' ' + u.last } },
})
const page = filterInMemory(users, rows, input, { allowed: ['name', 'age', 'fullName'] })
// { data, meta: { total, perPage, currentPage, lastPage, firstPage } }
见 仓库读取器。 。 。 .
许可证
麻省理工学院