graphql 查询的实体关联语法问题

Entity Association syntax issue with graphql queries

我想了解 graphql 的查询和变异语法。给出这个例子:

type Author {
  id: Int!
  firstName: String
  lastName: String
  posts: [Post]
}

type Post {
  id: Int!
  title: String
  author: Author
  votes: Int
}

type Query {
  posts: [Post]
  author(id: Int!): Author
} 

将 post 与作者相关联的查询应该是什么样的?这是连接发挥作用的地方还是其他原因?这是我试图解决问题但有用的尝试。

mutation createAuthor {
  createAuthor(input: {
    id: 123
    firstName: "Bob"
    lastName: "Smith"
  }) {
    id
    firstName
    lastName
  }
}

query listAuthors {
  listAuthors {
    items {
      id
      firstName
      lastName
    }
  }
}

mutation createPost {
  createPost(input: {
    id: 12345
    title: "Title"
    votes: 345
    author: {
      lastName: {
        contains: "Bob"
      }
    }
  }) {
    id
    title
    votes
    author {
      id
      firstName
      lastName
    }
  }
}

如有任何帮助,我们将不胜感激。我的目标是查询作者和 return 所有与该作者关联的 post,并创建一个 Post 突变,为作者添加 post。

一个问题有 2 个问题,所以我会按问题的顺序回答。

1. return 与作者相关联的所有 post

您的架构看起来是正确的。查询看起来像:

query {
  author(id: 1) {
    id
    posts {
      id 
      title
    }
  }
}

2。创建 Post 并附加到作者

在你的例子中,如果你想公开一个接口来创建一个Post,那么你必须在你的模式中公开一个突变字段

例如:

type Mutation {
  createPost(input: CreatePostInput): Post
}

如果您想在创建 post 的同时将其附加到作者,那么您可以添加 authorId 作为输入的一部分,这里我们只想附加Post 给现有作者:

input CreatePostInput {
  title: String
  authorId: ID!
  votes: Int
}

当然这只是接口定义。我们需要实际创建 Post 和 link 它给解析器内部的作者。

突变查询如下所示:

mutation createPost {
  createPost(input: {
    title: "Title"
    votes: 345
    authorId: "authorId1" 
  }) {
    id
    title
    votes
    author {
      id
      firstName
      lastName
    }
  }
}

希望对您有所帮助!