首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建一个插入数组而不是替换数组的变异?

如何创建一个插入数组而不是替换数组的变异?
EN

Stack Overflow用户
提问于 2017-06-16 18:47:34
回答 3查看 1.4K关注 0票数 1

我最近一直在玩GraphQL,目前正在学习突变。我有点糊涂了。我有一个带有relation Comments的模型Comments。我有一个突变,看起来像这样:

代码语言:javascript
运行
复制
mutation addCommentToPost {
  updatePost(
    id: "POST-1",
    comments: [{
      body: "Hello!"
    }]
  ) {
    id,
    comments {
      id,
      body
    }
  }
}

问题是,每当我运行这个程序时,它似乎会删除所有的注释,并将注释设置为我刚才添加的注释。更确切地说,我如何编写一个插入comments数组而不是替换它的变异?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-17 19:01:38

您正在使用名为updatePosts的突变,我假设它(基于名称)只是通过替换传递的字段来更新post。如果要使用updatePosts突变添加注释,首先必须查询帖子才能获得当前的注释列表,然后将注释添加到末尾,然后使用整个注释列表(包括刚才添加到末尾的注释)调用updateComment

然而,这并不是一个很好的解决方案,特别是如果评论列表很长的话。如果您有能力更改GraphQL 服务器,您应该在服务器上创建一个新的突变,其签名类似于addComment(postId: ID, comment: CommentInput)。在该突变的解析函数中,只需添加传递到当前注释列表末尾的注释即可。

代码语言:javascript
运行
复制
// resolver for addComment:
addComment(root, args) {
  // validate inputs here ...

  const post = db.getPost(args.postId);
  post.comments.append(args.comment);
  db.writePost(post.id, post);
}

db.getPostdb.writePost是一些函数,您必须定义自己才能检索/编写一篇文章,无论您在何处存储它。

需要注意的是,与SQL或Mongo查询不同的是,没有解析函数,GraphQL突变本身就没有任何意义。突变所做的是在它的解析函数中定义完全。突变名和参数只与解析函数一起获得意义。应该由您(或公司的GraphQL服务器开发人员)编写解决函数。

票数 3
EN

Stack Overflow用户

发布于 2017-06-18 13:44:16

目前在Graphcool中解决这种情况的方法是为链接到PostComment使用创建突变。这叫做嵌套连接突变

这就是它的样子:

代码语言:javascript
运行
复制
mutation {
  createComment(
    text: "Hello!"
    postId: "POST-1"
  ) {
    id
    text
    post {
      comments {
        id
      }
    }
  }
}

在将来,可以引入其他嵌套参数,如comments_setcomments_push,然后就可以这样推送:

代码语言:javascript
运行
复制
mutation addCommentToPost {
  updatePost(
    id: "POST-1",
    comments_push: [{
      body: "Hello!"
    }]
  ) {
    id,
    comments {
      id,
      body
    }
  }
}

披露:我在石墨酷公司工作。

票数 1
EN

Stack Overflow用户

发布于 2017-06-17 17:15:04

您可以使用这些代码作为突变的示例。

代码语言:javascript
运行
复制
module.exports = (refs) => ({
  type: refs.commentType,
  args: {
    id: {
      type: GraphQLString
    },
    body: {
      type: GraphQLString
    }
  },
  resolve: (parent, args, root) => {
    return createUser(args);
  }
});
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44596074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档