我正在使用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中生成。
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来查询...