You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:45:08