如何使用 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 中的多个图像