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



我有一个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并添加新的标记,但覆盖Posttag字段中的所有现有值:

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

我看到@marktani的这篇帖子,但不清楚如何实现他概述的组合方法:

组合您也可以在同一突变中使用标签和标签ID,这将把新的Tutorial节点连接到标签ID中的所有标签,并把它连接到标签中的新标签。如果你只想允许带有唯一文本的标签,那么这就是你想要做的,所以对于一个新的教程,可能会有一些已经存在的标签,还有一些需要创建。

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

好的,所以目前有一个Graphcool错误,将tagstagsIds传递到突变将创建并关联新创建的Tags,但不会将tagsIds关联添加到现有的Tags。我在Graphcool的GitHub回购上发布了一个问题,他们已经承认了这一点https://github.com/graphcool/framework/issues/1288

最新更新