请在下面找到一个基本的简化问题和问题:
数据类型:
USER
名称
房屋(一对多)
STREET
HOUSE
请注意,在我的数据模型中,用户和街道之间没有任何参考(也许垄断并不是最好的例子 - .-)
问题:
用户可以在不同的街道上拥有多个房屋。如何查询特定用户所拥有的街道列表?
通缉结果:
{
"data": {
"User": {
"name": "The Hat",
"streets": [
{
name: "Bow Street"
},
{
name: "Oxford Street"
},
{
name: "Park Lane"
},
]
}
}
}
这可能吗?
答案 0 :(得分:1)
通常通过在查询中使用嵌套字段来处理这样的关系数据。在查询中遍历数据图的能力是GraphQL的最大好处之一。
通常,this article about GraphQL APIs是了解其工作原理的有用资源。
让我们看看一些不同的可能查询。
query {
allStreets(filter: {
house: {
user: {
id: "user-id"
}
}
}) {
name
}
}
在这里,我们使用传入的a relational filter作为参数来查询与特定用户相关的小时数相关的街道,从而产生:
{
"data": {
"allStreets": [
{
"name": "Bow Street"
},
{
"name": "Oxford Street"
},
{
"name": "Park Lane"
}
]
}
}
我们可以看到我们回到街道列表。我们还可以在allStreets
查询中包含house字段以获取该信息。
query {
User(id: "user-id") {
name
houses {
street {
name
}
}
}
}
这里我们按id指定用户,因此结果的顶级对象是单个用户对象。此外,我们正在返回用户拥有房屋的街道列表:
{
"data": {
"User": {
"name": "The Hat",
"houses": [
{
"street": {
"name": "Bow Street"
}
},
{
"street": {
"name": "Oxford Street"
}
},
{
"street": {
"name": "Park Lane"
}
}
]
}
}
}
值得注意的是,响应的结构精确地遵循了查询的结构。