繁体   English   中英

如何在prisma中过滤布尔值

[英]How to filter a boolean in prisma

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

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

您可以在filter (带有文本)和带有boolean的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,
  })
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM