1

我正在开发一个后端有 Prisma、Prisma-binding 和 Apollo Server 的食品订单平台。顾客可以选择他附近的一家餐馆,然后将一道或多道菜添加到他的购物车中。有可能当餐厅 x 的菜已经添加时,顾客决定从另一家餐厅,餐厅 y 订购。因此,在创建订单和付款网址之前,我需要先在后端根据客户 ID 和最终选择的餐厅来过滤添加的菜肴。

我的 prisma 数据模型中有三种数据类型:Customer、CartItem 和 Dish

type Customer {
    id: ID! @id
    createdAt: DateTime! @createdAt
    updatedAt: DateTime! @updatedAt
    name: String
    email: String
    phone: String
    user: User
    cart: [CartItem]!
    orders: [Order]!
}

type CartItem {
    id: ID! @id
    quantity: Int! @default(value: 1)
    dish: Dish!
    customer: Customer! @relation(link: INLINE)
}

type Dish {
    id: ID! @id
    name: String!
    price: String!
    description: String!
    isAvailable: Boolean! @default(value: true)
    category: String
    restaurant: Restaurant!
}

在直接连接到数据库的 Prisma GraphQL 操场中,我可以过滤创建订单所需的购物车项目,如下所示:

query {
  customer(where: { id: "ck8zwslgs00da0712cq88e3oh" } ) {
    id
    cart(where: { dish: { restaurant: { id: "ck904gwl400mz0712v0azegm3" } } }) {
      quantity
      dish {
        name
        price
        restaurant {
          id
          name
        }
      }
    }
  }
}

输出:

{
  "data": {
    "customer": {
      "id": "ck8zwslgs00da0712cq88e3oh",
      "cart": [
        {
          "quantity": 2,
          "dish": {
            "name": "Nachos Plate Hawaii",
            "price": "1150",
            "restaurant": {
              "id": "ck904gwl400mz0712v0azegm3",
              "name": "Taco Bell"
            }
          }
        },
        {
          "quantity": 1,
          "dish": {
            "name": "Nachos Plate Vulcano",
            "price": "1250",
            "restaurant": {
              "id": "ck904gwl400mz0712v0azegm3",
              "name": "Taco Bell"
            }
          }
        }
      ]
    }
  }
}

到目前为止一切顺利,但现在我需要在 Apollo 服务器中使用 prisma-binding 进行相同的查询。我尝试了一些东西,但它们都不起作用。前两个返回错误“字段 \"cart\" 不是由类型 CustomerWhereUniqueInput 定义的”。最后两个只是返回没有餐厅过滤器的每个 cartItem。

const data = await ctx.db.query.customer({
    where: {
        AND: [
            { 
                id: args.customerID 
            },
            {
                cart: {
                    dish : {
                        restaurant: {
                            id: args.restaurantID
                        }
                    }
                }
            }
        ]
    }
}, info);


const data = await ctx.db.query.customer({
    where: {
        id: args.customerID
        cart: {
            dish : {
                restaurant: {
                    id: args.restaurantID
                }
            }
        }
    }
}, info);


const data = await ctx.db.query.customer({
    where: {
        id: args.customerID
    },
    cart: {
        where: {
            dish : {
                restaurant: {
                    id: args.restaurantID
                }
            }
        }
    }
}, info);


const data = await ctx.db.query.customer({
    where: {
        id: args.customerID
    },
    cart: {
        dish : {
            restaurant: {
                where: {
                    id: args.restaurantID
                }
            }
        }
    }
}, info);

有人可以帮助我以正确的方式过滤客户 ID 和餐厅 ID 吗?

4

0 回答 0