在 Graphcool / GraphQL 中发布更新突变时如何“更新”数组/嵌套字段?
Posted
技术标签:
【中文标题】在 Graphcool / GraphQL 中发布更新突变时如何“更新”数组/嵌套字段?【英文标题】:How to "upsert" an array/nested field when issuing update mutation in Graphcool / GraphQL? 【发布时间】:2018-04-30 10:18:05 【问题描述】:我有一个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
我通过@marktani 遇到了this post,但不清楚如何实现他概述的combined 方法:
合并 您还可以在同一突变中使用标签和标签ID,这会将新的教程节点连接到标签ID中的所有标签,并将其连接到标签中的新标签。如果您只想允许带有唯一文本的标签,这就是您想要做的,因此对于新教程,可能会有一些标签已经存在,而一些需要创建。
目前是否不可能用一个突变来做到这一点?在使用新标签更新帖子以重新建立Post
和现有Tag
id 之间的关联后,是否需要进行第二次突变,即必须反复调用addToTagsOfPost(tagsTagId: ID!
postsPostId: ID!)
?谢谢!
【问题讨论】:
【参考方案1】:好的,所以there is currently a Graphcool bug 将tags
和tagsIds
传递给突变将创建并关联新创建的 Tags
,但不会将tagsIds
关联添加到现有 Tags
。我在 Graphcool 的 GitHub 存储库上发布了一个问题,他们已经承认了 - https://github.com/graphcool/framework/issues/1288
【讨论】:
以上是关于在 Graphcool / GraphQL 中发布更新突变时如何“更新”数组/嵌套字段?的主要内容,如果未能解决你的问题,请参考以下文章
GraphQL/GraphCool 为啥坐标不适用于 FLOAT?
graphql/graphcool:如何编写一个连接一对一和一对多关系的突变
尝试从反应应用程序连接到 graphcool 中继 API 时出现此错误:模块构建失败:错误:没有有效的 GraphQL 端点