#node.js #graphql #apollo-server #prisma
Вопрос:
Я хочу получить все данные, такие как участник, предложение, пользователь.
продукт включает в себя предложение. предлагаю включить участника.
если я использую запрос, я хочу получить все данные, тестовый запрос показывает только идентификатор пользователя, но я хочу, чтобы вся информация о пользовательском тестовом запросе показывала только идентификатор предложения, но я хочу, чтобы вся информация о предложении
модель prisma
model Product {
id Int @id @default(autoincrement())
prodName String
prodCode String
posts Post[]
holdings Holding[]
proposes Propose[]
}
model Propose {
id Int @id @default(autoincrement())
user User @relation(fields: [userId], references: [id])
userId Int
product Product @relation(fields: [productId], references: [id])
productId Int
title String
content String
totalAmt Int
participants Participant[]
createdAt DateTime @default(now())
}
model Participant {
id Int @id @default(autoincrement())
user User @relation(fields: [userId], references: [id])
userId Int
propose Propose @relation(fields: [proposeId], references: [id])
proposeId Int
amt Int
participatedAt DateTime @default(now())
}
Тип
type Participant {
id: Int!
user: User
propose: Propose
amt: Int
participatedAt: String
}
type seeParticipantResult {
ok: Boolean!
participants: [Participant]
error: String
}
type Query {
seeParticipant: seeParticipantResult
}
Запрос
export default {
Query: {
seeParticipant: async (_, __, { loggedInUser }) => {
try {
const participants = await client.participant.findMany({
where: {
userId: loggedInUser.id,
},
});
return {
ok: true,
participants,
};
} catch (e) {
return {
ok: false,
error: e,
};
}
},
},
};
тестовый запрос
query Query {
seeParticipant {
ok
participants {
id
user {
username
}
propose {
product {
prodName
prodCode
}
title
}
}
}
}
Результат
"data": {
"seeParticipant": {
"ok": true,
"participants": [
{
"id": 1,
"user": null,
"propose": null
}
]
}
}
}
он не показывает информацию о предложении и пользователе.
Комментарии:
1. У вас есть решатель для участника.предложите? Ваш решатель возвращает участников, но не какие-либо объединенные отношения.
Ответ №1:
Prisma не возвращает relation
объекты автоматически с запросом. При использовании GraphQL вам следует создавать отдельные функции распознавания для любых полей отношений (например Participant.user
, в вашей схеме GraphQL).
Вот как может выглядеть решатель для Participant.user
:
Participant: {
user: (parent, args, context) => {
return client.participant.findUnique({where: {id: parent.id}}).user()
}
}
Я использую API Prisma fluent, чтобы получить соединение user
из findUnique
запроса для a participant
.
Обратите внимание, что вам нужно будет сделать что-то подобное для Propose
.