graphQL-是否可以通过单个解析器功能将关系数据解析为不同类型?

时间:2018-11-08 22:52:04

标签: types graphql

我将尝试简化此示例。

因此,我有两个表格-一个用于帖子,一个用于用户。这些表当然将通过posts.user_id和users.id链接。在我的应用程序中,我将获取一系列包含用户详细信息的帖子(如您所愿)。

export default gql`
  query ArticlePosts($articleId: String!) {
    articlePosts (articleId: $articleId)  {
      id
      comment
      poster {
        id
        username
      }
    }
  }
`

typeDef ...

export default `

  type ArticlePost {
    id
    comment
    poster: User!
  }

  type User {
    id: Int!
    username: String!
  }

  type Query {
    articlePosts(articleId: String!): [ArticlePost!]
  }
`

我尝试了两种不同的解决方法:-

  1. 解析器返回一个ArticlePost类型的数组,并针对用户从父查询返回的每种ArticlePost类型执行查询(如上所述)
  2. 解析器通过SQL中的简单INNER JOIN语句,返回一个ArticlePost类型的数组(如上所述),其中包含从续集查询返回的发帖人/用户详细信息。

现在显然,第二种解决方法仅执行单个数据库查询,而第一种选择是执行许多查询以拉回关系数据。

有什么方法可以执行第二种方法,同时仍然确保graphQL仍可以识别两种不同的类型(ArticlePost和User)?就像让父级(ArticlePost)解析器的子级返回JOIN查询中的相应字段一样简单:-

ArticlePost: {
  poster: async (parent, args, context) => {
	return {id: parent.posterId, id: parent.posterUsername}
  },
}

我不确定这是否是一个好习惯,是否有更干净的方法可以做到这一点,也许可以在父解析器调用本身中进行处理?我对graphQL还是很陌生,所以以前从未遇到过这种情况。

谢谢。

0 个答案:

没有答案