Как разрешить подразделы / отношения в призме (вложенные списки) - PullRequest
1 голос
/ 05 июня 2019

Давайте возьмем пример из репозитория github prisma:

У нас есть пользователь, у пользователя может быть несколько постов, и у одного поста может быть несколько ссылок.

Моя цель состоит в том, чтобычтобы получить все сообщения и все ссылки.Это означает, что мой ответ - это список (ссылки) в списке (сообщения).

Я хочу отобразить возвращаемые значения в виде двух вложенных списков.

datamodel.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!
}

schema.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
    }
  }
}

Приведенный выше фрагмент кода не будет работать.

EDIT Я хочу использовать следующее:

User: {
  listPosts: (parent, args, context, info) {
    return context.prisma.posts().links()
  }
}

Таким образом, в моем ответе (данные переднего плана через компонент запроса Act-Apollo) я хочу отобразить сообщения и ссылки в каждом сообщении.

НО атрибут связи в сообщениях равен нулю.

Есть ли другой способ добиться этого?!

1 Ответ

1 голос
/ 05 июня 2019

Согласно документам:

Клиент Prisma имеет свободный API для запроса отношений в вашей базе данных.Это означает, что вы можете просто связать вызовы вашего метода для навигации по свойствам отношения возвращаемых записей. Это возможно только при получении отдельных записей, но не для списков.Это означает, что вы не можете запрашивать поля отношений записей, которые возвращаются в списке.

Чтобы обойти это ограничение, вы можете использовать метод $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)
...