如何" upsert"在Graphcool / GraphQL中发出更新变异时的数组/嵌套字段?

时间:2017-11-16 18:49:44

标签: graphql apollo react-apollo apollo-client graphcool

我有Post类型而不是tag字段,可以与许多Tag条目相关联(人与人之间的关系)。我遇到的问题是更新Post时 - 我需要为尚不存在的标记创建和关联新的Tag,同时保留现有的Post } - > Tag关系。基本上,当我在嵌套的一对多字段上发布变异更新时,我正在寻找的东西类似于upsert

这是我的架构:

type Post @model {
  createdAt: DateTime!
  createdBy: User @relation(name: "PostsByUser")
  description: String @defaultValue(value: "''")
  id: ID! @isUnique
  tags: [Tag!]! @relation(name: "TagsOfPost")
  ...
}

type Tag @model {
  id: ID! @isUnique
  tag: String!
  createdBy: User @relation(name: "TagsByUser")
  createdAt: DateTime!
  posts: [Post!]! @relation(name: "TagsOfPost")
}

此突变可用于更新Post并添加标记,但会覆盖Post tag中的所有现有值字段:

mutation updatePost(
  $id: ID!
  $createdById: ID!
  $timestamp: DateTime!
  $description: String
  $tags: [PosttagsTag!]!
) {
  updatePost(
    id: $id
    createdById: $createdById
    timestamp: $timestamp
    description: $description
    tags: $tags
  ) {
    id
    timestamp
    description
    tags {
      id
      tag
    }
    createdBy {
      id
      username
    }
  }
}

this post遇到@marktani,但不清楚如何实现他概述的组合方法:

  

联合   您还可以在同一个变异中使用标签和标签ID,这会将新的Tutorial节点连接到tagsIds中的所有标签,并将其连接到标签中的新标签。如果您只想允许带有唯一文本的标签,这就是您要执行的操作,因此对于新的教程,可能会存在一些已存在的标记,以及一些需要创建的标记。

目前不可能通过一个突变来做到这一点吗?在使用新标签更新帖子以重新建立Post和现有Tag ID之间的关联后,是否需要第二次突变,即必须重复调用addToTagsOfPost(tagsTagId: ID! postsPostId: ID!)?谢谢!

1 个答案:

答案 0 :(得分:1)

好的,there is currently a Graphcool bugtagstagsIds传递给突变会创建并关联新创建的 Tags但不会将tagsIds关联添加到现有 Tags。我在Graphcool的GitHub回购中发布了一个问题,他们已经承认了它 - https://github.com/graphcool/framework/issues/1288