Как я могу указать дополнительные фильтры запросов в Prisma? - PullRequest
1 голос
/ 26 марта 2020

Я создаю приложение с 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 } }
    }) {
    ...
    }
}

Я исследовал и нашел возможное решение , но пользовательский ввод, на который ссылается пост, не генерируется в моей призме.

Ответы [ 2 ]

3 голосов
/ 29 марта 2020
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)
}

Вы можете проверить на Backend свои аргументы. И создать гибкий объект для запроса ...

2 голосов
/ 28 марта 2020
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"
        }
    })
}

brandId: "exampleBrandId" - это должен быть динамический c, и одним из вариантов может быть что-то вроде "Все бренды", который затем будет запрашивать все бренды.

...