Drupal9+Gatsby站点如何为段落引用字段自定义GraphQL Schema
解决方案
你需要使用GraphQL的*联合类型(Union Type)*来实现多类型字段的定义,具体修改方式如下:
步骤1:定义专属联合类型
首先把你允许的4种段落类型组合为一个联合类型,命名可以自定义,比如SchoolComponent,示例假设4个允许的段落机器名为carousel、text_block、image_gallery、contact_form,你可以替换为实际的段落机器名。
步骤2:替换字段定义
因为是可无限关联的实体引用,字段需要定义为联合类型的数组,同时适配Drupal返回的空值场景。
修改后的完整代码如下:
exports.createSchemaCustomization = ({ actions }) => { const { createTypes } = actions; const typeDefs = ` # 定义允许的4种段落联合类型,替换右侧为你实际的段落机器名 union SchoolComponent = paragraph__carousel | paragraph__text_block | paragraph__image_gallery | paragraph__contact_form type node__school implements Node { field_location: String field_type_r_a: Boolean relationships: node__schoolRelationships } type node__schoolRelationships { # 数组格式适配多值引用,问号允许字段为空值 field_components: [SchoolComponent] } ` createTypes(typeDefs); };
后续查询写法
查询该字段时需要使用GraphQL内联片段指定不同段落类型要获取的字段,示例查询:
query { allNodeSchool { nodes { relationships { field_components { __typename ... on paragraph__carousel { field_slides field_autoplay } ... on paragraph__text_block { field_content field_text_align } # 剩余2种段落的内联片段按同理规则补充即可 } } } } }
内容的提问来源于stack exchange,提问作者lordZ3d
相关产品推荐
相关产品推荐

