javascript - 如何过滤棱镜中的布尔值
问题描述
我目前正在写一些可以过滤用户列表的东西。过滤器基于一个查询,该查询传递一个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”作为我的过滤器参数传递,这将起作用,但这显然不起作用,因为更多的布尔值被添加到 User 类型中,而且也不是很清楚。
处理这个问题的最佳方法是什么?
解决方案
filter
您可以在(with text) 和options
with boolean 等之间进行拆分:
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,
})
}
推荐阅读
- python - 如何一次将与特定请求相关的所有文件下载到一个 zip 文件中?
- sql - 在 HANA 中使用正则表达式过滤列
- r - 在每轮比赛后使用R中的dplyr创建具有排名位置的列
- python - python中的分层矩形
- python - 如何从列表列表或元组列表中删除包含某些单词的列表?
- amazon-web-services - 上传到 Amzaon S3 文件夹盯着一个词
- amazon-web-services - 提供的角色没有足够的权限。(服务:AmazonAppConfig)
- python - 如何根据分隔符将一行拆分为多行,并将它们作为键:值对绑定到另一列?
- wordpress - 你能帮我确定目录的位置吗?WordPress 目录位于底部
- javascript - 无法使用 ReactJS 中的映射遍历对象