如何在Orchard的GraphQL中关联两个内容项并按城市筛选办公室
Orchard GraphQL 按关联城市筛选办公室解决方案
前置配置检查
首先确认Office内容类型的关联字段配置,这是筛选条件不显示的核心原因:
- 确认Office类型下有绑定到City类型的内容选择器字段(ContentPicker Field),假设字段后台命名为
RelatedCity - 进入Orchard后台→「Content Definition」→找到Office类型的对应关联字段,勾选
Enable filtering in GraphQL queries选项,保存后重启站点,该字段就会出现在GraphQL的where筛选列表中
实现方案
方案1:直接筛选关联城市(推荐,性能最优)
配置完上述开关后,可直接通过Office的查询接口按城市筛选,示例代码如下:
query { office(where: { relatedCity: { contentItem: { displayText: { equal: "纽约市" } } } }) { items { displayText address relatedCity { contentItem { displayText } } } } }
如果已经拿到纽约市的ContentItemId,用ID筛选精度更高、性能更好:
query { office(where: { relatedCity: { contentItemId: { equal: "xxxxxx" } # 替换为纽约市的实际ContentItemId } }) { items { displayText address } } }
方案2:嵌套查询(无需修改字段配置)
如果不想调整字段配置,也可以先查询纽约市,再嵌套拉取关联的所有办公室:
query { city(where: { displayText: { equal: "纽约市" } }) { items { displayText relatedOffices { # 该字段为City类型下关联Office的反向引用字段,需提前配置 items { displayText address } } } } }
常见问题排查
- 所有查询的字段名需要和后台配置的实际字段名一致,Orchard GraphQL会自动把大驼峰的后台字段名转为小驼峰用于查询
- 配置完筛选开关后如果看不到对应字段,清空GraphQL Schema缓存、重启站点即可生效
内容的提问来源于stack exchange,提问作者Parinaz.N
相关产品推荐
相关产品推荐

