Strapi v4 响应中没有关系字段

Tal*_*sar 10 javascript strapi

我遇到的问题是,在获取数据后,响应中不存在任何关系字段。当我查看具有关系的模式之一的模式时,我发现关系字段存在于属性对象中。但我的回复中仍然只得到非关系字段。

这是我的模式之一

{
  "kind": "collectionType",
  "collectionName": "activities",
  "info": {
    "singularName": "activity",
    "pluralName": "activities",
    "displayName": "activity"
  },
  "options": {
    "draftAndPublish": true
  },
  "pluginOptions": {},
  "attributes": {
    "name": {
      "type": "string"
    },
    "date": {
      "type": "date"
    },
    "subcategory": {
      "type": "relation",
      "relation": "oneToOne",
      "target": "api::subcategory.subcategory"
    },
    "members": {
      "type": "relation",
      "relation": "manyToMany",
      "target": "api::member.member",
      "inversedBy": "activities"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Sal*_*'sa 37

默认情况下,获取条目时不会填充Strapi v4关系。

说明:

查询可以接受populate参数来显式定义要填充的字段,语法如下:

GET /api/:pluralApiId?populate=field1,field2

请求示例:获取书籍并使用作者的姓名和地址填充关系

GET /api/books?populate=author.name,author.address

为了方便起见,* 通配符可用于填充所有一级关系:

示例请求:获取所有书籍并填充其所有一级关系

GET /api/books?populate=*

示例请求:获取所有书籍并填充作者及其所有关系

GET /api/books?populate[author]=*

注意: 仅使用 LHS 括号语法(即)填充更深层次的关系:populate=*.[populate]=*

示例请求:获取嵌套在“全局”单一类型的“导航”组件内的所有关系

GET /api/global?populate[navigation][populate]=*

解决方案:

将您的 API url 更改为以下之一,您应该能够看到响应中填充的相关字段。

GET /api/activities?populate=subcategory,members

或者

GET /api/activities?populate=*

参考:

  • 这是非常明确和好的答案。谢谢 ! (2认同)
  • 重要的是,当使用的关系是插件“用户权限”类型时,在管理面板下,对于对角色的公共访问,必须显式授予“查找”访问权限。否则,即使使用“populate=*”,该关系也不会出现在响应中。更多请阅读“注意事项”部分 - https://docs.strapi.io/developer-docs/latest/developer-resources/database-apis-reference/rest/填充字段.html#population (2认同)