首页 > 解决方案 > 如何过滤棱镜中的布尔值

问题描述

我目前正在写一些可以过滤用户列表的东西。过滤器基于一个查询,该查询传递一个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 类型中,而且也不是很清楚。

处理这个问题的最佳方法是什么?

标签: javascriptgraphqlprismaprisma-graphql

解决方案


filter您可以在(with text) 和optionswith 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,
  })
}

推荐阅读