Возьмем пример из репозитория prisma на github:
У нас есть пользователь, у пользователя может быть несколько сообщений, и у одного сообщения может быть несколько ссылок.
Моя цель - получить все сообщения и все ссылки. Это означает, что мой ответ представляет собой список (ссылки) в списке (посты).
Я хочу сопоставить значения, которые я получаю, как два вложенных списка.
модель данных.prisma
type User {
id: ID! @id
email: String! @unique
name: String
posts: [Post]!
}
type Post {
id: ID! @id
createdAt: DateTime! @createdAt
updatedAt: DateTime! @updatedAt
published: Boolean! @default(value: false)
title: String!
content: String
author: User!
links: [Link]!
}
type Link {
id: ID! @id
url: String
title: String
post: Post!
}
схема.graphql
type Query {
...
}
type Mutation {
...
}
type Link {
id: ID!
url: String
title: String
post: Post!
}
type Post {
id: ID!
createdAt: DateTime!
updatedAt: DateTime!
published: Boolean!
title: String!
content: String
author: User!
}
type User {
id: ID!
email: String!
name: String
posts: [Post]!
}
Я хочу запросить все сообщения пользователя и все ссылки для каждого сообщения в ответе.
Как мне запросить этот запрос?
user {
id
posts {
id
links {
id
}
}
}
Приведенный выше фрагмент кода не сработает.
РЕДАКТИРОВАТЬ Я хочу использовать следующее:
User: {
listPosts: (parent, args, context, info) {
return context.prisma.posts().links()
}
}
Итак, в моем ответе (данные во внешнем интерфейсе через компонент запроса response-apollo) я хочу сопоставить сообщения и ссылки в каждом сообщении.
НО атрибут ссылок в сообщениях равен нулю.
Есть ли другой способ добиться этого?!
Можете пояснить, что не работает? Какие ошибки вы видите? Как вы на самом деле используете приведенный выше запрос внутри своего распознавателя?
@DanielRearden обновил мой вопрос. Спасибо.


Согласно документам:
Prisma client has a fluent API to query relations in your database. Meaning you can simply chain your method calls to navigate the relation properties of the returned records. This is only possible when retrieving single records, not for lists. Meaning you can not query relation fields of records that are returned in a list.
Чтобы обойти это ограничение, вы можете использовать метод $fragment:
const fragment = `
fragment UserWithPostsAndLinks on User {
id
email
name
posts {
id
title
content
links {
id
url
title
}
}
}
`
const userWithPostsAndLinks = await prisma.user({ id: args.id }).$fragment(fragment)
@DanielRearden Prisma по умолчанию использует встроенное отношение, поэтому в данном случае в этом нет необходимости.