【发布时间】:2019-07-14 12:21:48
【问题描述】:
我试图弄清楚如何使用 GraphQL 在父子关系中实现自下而上的过滤。
考虑以下对停车场和可用停车位进行建模的基本类型层次结构:
type ParkingLot {
id: Int!
spots: [ParkingSpot]
}
type ParkingSpot {
id: Int!,
occupied: Boolean!
}
我想以一种能够检索所有至少有一个空闲停车位的停车场的方式实施我的解析器。
query AllParkingLotsWithStatus($status : Boolean = false) {
ParkingLot {
id
spots(occupied: $status) {
id
}
}
}
我正在使用的 GraphQL 的具体实现是基于 PHP 的,并且可用 here,但任何基于 JS 的实现都会非常有助于为我指明正确的方向。我知道那里有支持使用“where:”参数进行过滤的库,但我必须自己实现这个机制,因为我使用的库不提供开箱即用的功能。
我探索的一个想法是在 ParkingLot 的解析器中简单地编写一个 JOIN 语句,但我觉得这不符合 GraphQL 的精神。
我想到的另一个想法是重写查询,使其首先检索 ParkingSlots,并且仅在其状态可用时才获取其父级。但是,这可能是计算密集型的,因为停车场比停车位少,因此从父级到子级导航关系的计算密集度可能会更低。
您会建议哪种方法不归结为更改类型层次结构(我无法做到这一点)。是否有一种方法可以在子节点的解析器中发生某些情况时立即拒绝父节点,或者这是否会被认为超出 GraphQL 实现的范围,更像是正在使用的实际库的功能?我想因为那里的一些库支持使用“where:”子句进行过滤,所以这必须是可能的,而且不应该很复杂。
【问题讨论】:
标签: graphql graphql-js graphql-php