我正在开发一个后端有 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 吗?