如何过滤prisma中的布尔值

时间:2019-08-01 10:10:07

标签: javascript graphql prisma prisma-graphql

我目前正在写一些可以过滤用户列表的内容。该过滤器基于一个查询,该查询传递一个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”作为过滤器参数,这将起作用,但是由于向用户类型中添加了更多布尔值,这显然不起作用,而且也不是很清楚。

>

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

1 个答案:

答案 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,
  })
}