温馨提示:本文翻译自stackoverflow.com,查看原文请点击:reactjs - How can I specify optional query filters in Prisma?
apollo graphql prisma reactjs

reactjs - 如何在Prisma中指定可选的查询过滤器?

发布于 2020-06-12 15:38:51

我正在使用React,Apollo和Prsima构建一个应用程序,该应用程序允许用户按型号,品牌,价格对汽车进行过滤...例如,我知道如何按品牌对汽车进行过滤:

const GET_CARS = gql`
  query FilterCars($brandId: ID){
    cars(where: {   
        model : { brand: { id: $brandId } }
    }) {
        id
        model {
            name
            brand {
             name
            }
            horses
        }
        year
        km
        price
        ...
  }
`;

并在组件中:

const CarList = (props) => {
    const { data, loading, error } = useQuery(GET_CARS, {
        variables: {
            brandId: "exampleBrandId"
        }
    })

    ...
}

问题是,某些参数是可选的:也许用户不在乎品牌,型号或价格...因此,所有的汽车都应出现:如果未选择品牌,则应显示所有品牌的汽车;如果未选择价格,则应显示所有价格的汽车...

我怎样才能做到这一点?就像是:

query FilterCars($brandId: ID){
    cars(where: {   
        model : { brand: { id: $brandId || all_brand_ids } }
    }) {
    ...
    }
}

我研究了a并找到了可能的解决方案,但是该帖子所引用的自定义输入未在我的prisma中生成。

查看更多

提问者
Xalsar
被浏览
11
Tölz 2020-03-29 17:34
getCars(parent, args, {prisma}, info){
  const queryArgs ={}
  if(args.brandId){
     queryArgs ={
       where: {
         model: {
          id: args.brandId
       }
      }
    }
  }

 if(args.price){
    queryArgs={
      ...queryArgs,
      where: {
      ...queryArgs.where
      //What every you want to add
      }
    }
 }

  return prisma.query.cars(queryArgs, info)
}

您可以在后端检查您的参数。并创建一个灵活的obj来查询...