5

我正在尝试在我的当前项目中使用 Contentful,并且我正在尝试了解如何根据链接对象中的字段过滤我的查询结果。

我的顶级对象包含一个这样定义的链接:

  "name": "Service_Description",
  "fields": [
{
  "name": "Header",
  "id": "header",
  "type": "Link",
  "linkType": "Entry",
  "required": true,
  "validations": [
    {
      "linkContentType": [
        "offerGeneral"
      ]
    }
  ],
  "localized": false,
  "disabled": false,
  "omitted": false
},

此“标题”字段链接到具有此定义的另一个内容类型:

  "fields": [
{
  "name": "General",
  "id": "general",
  "type": "Link",
  "linkType": "Entry",
  "required": true,
  "validations": [
    {
      "linkContentType": [
        "genericGeneral"
      ]
    }
  ],
  "localized": false,
  "disabled": false,
  "omitted": false
},

然后链接到最低级别:

"fields": [{
  "name": "TagList",
  "id": "tagList",
  "type": "Array",
  "items": {
    "type": "Link",
    "linkType": "Entry",
    "validations": [
      {
        "linkContentType": [
          "tag"
        ]
      }
    ]
  },
  "validations": []
}

其中 tagList 是该内容可能具有的标签数组。

我希望能够从顶级对象运行查询,该对象说让我获得 X 个这些“Service_Description”内容条目,其中包含来自提供的标签列表的标签。

在 PostMan 中,我一直在运行:

https://cdn.contentful.com/spaces/{SPACE_ID}/entries?access_token={ACCESS_TOKEN}&content_type=serviceDescription&include=3

我正在尝试添加一个类似这样的过滤器:

fields.header.fields.general.fields.tagList.sys.id%5Bin%5D={TAG_SYS_ID}

这显然是不正确的,但我一直在努力解决如何通过这种关系来实现我的目标。仔细阅读文档,这似乎与包含有关,但我不确定如何解决这个问题。

关于如何实现我的目标或这是否可能的任何方向?

4

2 回答 2

3

现在这是可能的,我相信基于对这个功能的请求在 API 中解决了一些问题。你可以在这里看到线程。

它的要点是,您必须查询具有链接条目的条目,然后在查询中包含这些链接条目的 contentType,如下所示:

contentfulClient.getEntries({
  'content_type': 'location',
  'fields.market.fields.marketName': 'New York',
  'fields.market.sys.contentType.sys.id': 'marketRegion'
})

于 2018-08-02T18:37:17.753 回答
2

不幸的是,您所要求的内容目前在 Contentful 中是不可能的。

我们在嵌套/引用的内容类型方面遇到了非常相似的问题,支持人员表示这是不可能的。

我们最终编写了一个非常复杂的系统,让我们可以做你想做的事。本质上是对引用的内容进行全文搜索,然后查询所有父条目。然后,我们通过遍历父母来匹配关系以找到关系。

抱歉,这再简单不过了。希望开发人员能够改进这种复杂性。我们已引起他们的注意。

于 2016-07-05T13:10:02.520 回答