我想使用单个 GQL 查询获取多个项目数据。我能够获取单个项目的数据。但我想要两个不同项目的数据,并且两个项目都有不同的模板。对于 Sitecore JSS 来说,这是否可能是一个 GQL 查询。

有人能帮我解决吗?提前谢谢了。

query GQLQuery($datasource: String!) {
  datasource: item(path: $datasource, language: "en") {
  {
   item1
  }
  {
   item2
  }
 }
}

3

  • 当我将此查询传递给组件 Graphql 查询部分时,它将如何获取 2 个数据源。


    – 

  • 我已更新以下关于组件 GraphQL 查询如何提供两个数据源的答案。如果您有任何疑问,请告诉我。


    – 


  • 您可以在 GQL 查询中传递数据源项目路径,例如“item(path:”/sitecore”)”。


    – 



最佳答案
4

您可以通过多种方式来完成。

1. 如果您的两个项目都属于同一个父项目,那么您可以将父项目指定为数据源项目。以下是示例:您可以通过过滤模板 ID 在单个查询中轻松获取多个项目。

query GQLQuery($datasource: String!) {
  datasource: item(path: $datasource, language: "en") {
    name
    Item1: children(
      includeTemplateIDs: ["{B5D116DE-BFE8-4A06-A3FE-90C84320ECCB}"]
    ) {
      name
      ... on TemplateName {
        title {
          value
        }
        subtitle {
          value
        }
      }
    }
    Item2: children(
      includeTemplateIDs: ["{02CDBE64-254B-424B-90C3-E74FDBA02572}"]
    ) {
      name
      ... on TemplateName {
        title {
          value
        }
        subtitle {
          value
        }
      }
    }
  }
}

回复:

2. 您可以轻松地向查询添加额外项目。赋予它们一个唯一的名称,例如:

query GQLQuery($datasource1: String!, $datasource2: String!, $language:String! ){
  item1: item(path:$datasource1, language:$language){   
      id
    }
  item2: item(path:$datasource2, language:$language){   
        title {
          value
        } 
        text {
         value
      }
    }
 }

回复:

{
  "data": {
    "item1": {
      "id": "11111111111111111111111111111111"
    },
    "item2": {
      "title": {
        "value": "Sitecore Experience Platform"
      },
      "text": {
        "value": "<p style=\"line-height: 22px;\">From a single connected platform that also integrates with other customer-facing platforms,  to the <a href=\"https://doc.sitecore.net/\" target=\"_blank\" title=\"Sitecore Documentation site\">Sitecore Documentation site</a></p>\r"
      }
    }
  }
}

希望这有帮助!

1

  • 嗨 Praveen,谢谢你的详细回答。我已经检查了两种方案是否对我有效。


    – 


你可以在 GraphQL 中将查询组合成 1 个。如下所示:

query GQLQuery($datasource1: String!, $datasource2: String!) {
  datasource1: item(path: $datasource1, language: "en") {
   {
    item1
   }
  }
  datasource2: item(path: $datasource2, language: "en") {
   {
    item2
   }
  }
}

是的,可以使用 Sitecore JSS 中的单个 GraphQL 查询从多个项目中提取数据,即使它们基于不同的模板。您可以通过在同一查询中指定它们的路径或 ID 来查询多个项目。

您可以按照以下方法修改查询,以便在单个请求中从两个不同的项目获取数据。

query GQLQuery($datasource1Path: String!, $datasource2Path: String!, $language: String!) {
  item1: item(path: $datasource1Path, language: $language) {
    id
    name
    template {
      id
      name
    }
  }
  item2: item(path: $datasource2Path, language: $language) {
    id
    name
    template {
      id
      name
    }
  }
}

以下是答复。

希望这有帮助。

尽管您询问了有关 graphql 查询以获取多个项目数据的问题,并且您已经收到了有用的信息,但我建议您考虑使用。 它有助于在预定义的结构中创建数据源。

理想情况下,一个组件应该只有一个数据源。您可以像这样创建数据源:

  • 数据源模板

    • 模板 1
    • 模板 2

Praveen Sharma 已经很好地解释了如何从子项中获取数据。这不仅可以帮助您为组件创建通用查询(用于组件的 Graphql 查询部分),还可以规范内容作者遵循查询所期望的层次结构。

希望这有帮助。