假设我有这样的GraphQL Schema:
Schema {
user($id: ID) {
id: ID
name: String
}
}
我知道如何通过他的ID查询一个用户,我可以使用别名来查询几个用户,如下所示:
GetSomeMore {
john: user(id: "123") {
name
}
mary: user(id: "321") {
name
}
}
但是,假设我只有一个用户ID列表,并希望查询每个用户ID的名称。我该怎么写这样的查询?
我可以提出的方法是动态生成包含user1
,user2
等别名的查询,或者在服务器上实现users(ids: [ID])
边缘。但我觉得应该有更好的解决方案。有吗?
(PS:我的代码示例可能存在语法错误,我将其更多地写为伪代码,以便了解我的观点。)
答案 0 :(得分:2)
我会选择你的最后一个命题:
Schema {
users($ids: [ID]) {
id: ID
name: String
}
}
使用像:
这样的解析器const users = async (root, { ids }) => await knex('users').whereIn('id', ids)
注意:我使用graphql-js + graphql-tools + knex.js来创建我的架构,我的类型和解析器。
答案 1 :(得分:2)
您可以将该功能作为模式的一部分来实现,例如id_in: [String]
查询的users
参数。
在Graphcool中,我们使用filter
参数来公开这样的功能。例如,您的查询可以这样完成:
query {
allUsers(filter: {id_in: ["123", "321"]}) {
id
name
}
}
结果
{
"data": {
"allUsers": [
{
"id": "123",
"name": "John"
},
{
"id": "321",
"name": "Mary"
}
]
}
}
要详细了解filter
参数检查the documentation。