如何使用 GraphQL 删除多个项目?

Posted

技术标签:

【中文标题】如何使用 GraphQL 删除多个项目?【英文标题】:How to delete multiple items with GraphQL? 【发布时间】:2017-06-27 01:03:08 【问题描述】:

我是 GraphQL 的新手。 如何编写删除突变来删除 GraphQL 中的多个项目(多个 ID)? 我使用 scaphold.io。

【问题讨论】:

【参考方案1】:

您可以使用 GraphQL 别名在对 GraphQL 服务器的同一请求中批量处理多个变更。

假设这是您删除一个项目的方式:

mutation deleteOne 
  deleteItem(id: "id1") 
    id
  

那么您可以在一个请求中删除多个项目:

mutation deleteMultiple 
  id1: deleteItem(id: "id1") 
    id
  
  id2: deleteItem(id: "id2") 
    id
  
  # ... and so on
  id100: deleteItem(id: "id100") 
    id
  

了解一个请求中的多个突变按规定的顺序(从上到下)顺序运行会很有帮助。您也可以以相同的方式在一个请求中运行多个查询,并且一个请求中的多个查询并行运行

如果您想运行 1000 个突变,最好将它们分成 10 组,每组 100 个。

更多信息和另一个例子可以在这个FAQ article以及官方GraphQL docs中找到。

【讨论】:

常见问题文章链接已损坏。 添加多个删除是不可能的,如果我删除100?【参考方案2】:

我认为好的解决方案是创建一个接受例如数组的方法(突变)。 ID,进一步用于从数据库中批量删除多条记录。

mutation deleteUsers($userIds: [Int!]!) 
    deleteUsers(userIds: $userIds) 
    ...
    

然后,在解析器中,您可以使用userIds 参数执行类似DELETE FROM users WHERE id IN userIds 的SQL 查询,其中userIds 当然应该被正确替换(转义),具体取决于您与数据库的交互方式。

【讨论】:

它可以工作,但是如何返回已被 GraphQL 突变删除的多个对象,以便您可以构建日志消息,例如:“X、Y 和 Z 已被删除”?

以上是关于如何使用 GraphQL 删除多个项目?的主要内容,如果未能解决你的问题,请参考以下文章

应该如何对列表中的项目进行重新排序,并更新多个对象,如何使用 GraphQL 突变进行持久化?

如何使用 Graphql 从 Strapi 查询 Gatsby 中的多个图像

在 AWS Amplify 中更改我的 GraphQL 架构时如何防止丢失生产数据?

如何使用 prisma (graphql) 集群

如何使用 express-graphql 引发多个错误?

如何在 GraphQL 中创建删除突变?