Привязка призмы Вложенная фильтрация
Я работаю над платформой заказа еды с Prisma, Prisma-binding и Apollo Server на бэкэнде. Клиент может выбрать ресторан по соседству и добавить одно или несколько блюд в свою корзину. Возможно, когда блюдо из ресторана x уже добавлено, покупатель решит заказать его из другого ресторана, ресторана y. Поэтому мне нужно отфильтровать добавленные блюда при оформлении заказа на основе идентификатора клиента и окончательного выбранного ресторана в бэкэнде, прежде чем создавать заказ и URL-адрес оплаты.
В моей модели данных призмы есть три типа данных: 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 с использованием привязки призмы. Я пробовал несколько вещей, но ни одна из них не работает. Первые два возвращают ошибку "Поле" тележка "не определено типом 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);
Может ли кто-нибудь помочь мне с правильным способом фильтрации по идентификатору клиента и идентификатору ресторана?