【问题标题】:How to filter a boolean in prisma如何过滤棱镜中的布尔值
【发布时间】:2019-12-09 21:54:36
【问题描述】:

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

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

【问题讨论】:

    标签: javascript graphql prisma prisma-graphql


    【解决方案1】:

    您可以在 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,
      })
    }
    

    【讨论】:

      猜你喜欢
      • 2020-05-15
      • 1970-01-01
      • 1970-01-01
      • 2022-07-21
      • 2017-06-25
      • 1970-01-01
      • 2014-05-11
      • 2011-02-05
      • 1970-01-01
      相关资源
      最近更新 更多