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

时间:2018-11-21 23:41:29

标签: graphql aws-appsync

我试图了解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
} 

查询应该如何将帖子与作者关联起来?这是联系发挥作用的地方还是其他地方?这是我尝试解决问题但尝试的尝试。

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

在此方面的任何帮助将不胜感激。我的目标是查询作者,并返回与该作者相关的所有帖子,并创建一个Post Mutation,将帖子添加到作者。

1 个答案:

答案 0 :(得分:1)

一个问题有两个,所以我将按照被问到的顺序回答。

1。返回与作者相关的所有帖子

您的架构看起来正确。查询如下:

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

2。创建帖子并附加到作者

在您的示例中,如果您想公开一个接口来创建一个Post,那么您将不得不在您的模式中公开一个mutation字段

例如:

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

如果您希望同时创建帖子,并且也将其附加到作者,则可以在输入中添加authorId作为输入的一部分,这里我们只想将帖子附加到现有作者:

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

当然,这只是接口定义。我们实际上需要创建Post并将其链接到解析器内部的Author。

变异查询如下:

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

希望有帮助!