我目前正在写一些可以过滤用户列表的内容。该过滤器基于一个查询,该查询传递一个filter
参数,然后由解析器选择,该解析器将搜索各个字段并返回数据。
这对文本效果很好,但是prisma在可以用于标量的搜索类型上有一些限制。因此,很难看出搜索布尔值的最佳方法是什么。
我的解析器如下:
const listUsers = async (parent, args, context, info) => {
const where = args.filter
? {
OR: [
{ name_contains: args.filter },
{ email_contains: args.filter },
{ phone_contains: args.filter },
{ active: args.filter },
],
}
: {}
return await context.prisma.users({
where,
})
}
示例查询如下:
query {
listUsers(filter: "test@test.com") {
name
email
}
}
从理论上讲,如果我简单地传递“ TRUE”或“ FALSE”作为过滤器参数,这将起作用,但是由于向用户类型中添加了更多布尔值,这显然不起作用,而且也不是很清楚。
>处理此问题的最佳方法是什么?
答案 0 :(得分:0)
您可以在filter
(带文本)和options
(带布尔值)之间进行分割,例如:
query {
listUsers(filter: "test@test.com", options: {active: true}) {
name
email
}
}
const fields = ['name', 'email', 'phone']
const listUsers = async (parent, args, context, info) => {
const where = {
OR: [
...fields.reduce((acc, field) => {
acc[name+'_contains'] = args.filter
return acc
},{}),
...args.options
]
}
return await context.prisma.users({
where,
})
}