Strapi:获取深度嵌套关系的所有嵌套属性

Ada*_*rcz 7 javascript json strapi

我最近开始使用 Strapi,并一直在研究如何处理内容关系等等......现在我已经达到了多个内容关系相互依赖的地步。

这是我的结构:

收藏类型:

  1. 类别
  2. 文章
    • 与内容关系:文章有一个类别

单一类型:

  1. 主页
    • 与内容相关:首页有很多文章

现在我想做的是通过简单地发出请求来获取分配到主页的文章类别的所有嵌套GET属性/homepage

我目前得到的是这样的 json 结构:

{
   "id": 1,
   "hero": {
    ....
   },
   "featuredArticles": {
    ....
   },
   "displayedArticles": [
      {
         "id": 2,
         "category": 5,
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

什么是预期的输出:

{
   "id": 1,
   "hero": {
    ....
   },
   "featuredArticles": {
    ....
   },
   "displayedArticles": [
      {
         "id": 2,
         "category": [
            {
              "id": 5,
              "title": "Foundation"
            }
         ],
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

/homepage我的怀疑是,当尝试从中获取而不是直接获取时,类别的属性基本上过于嵌套/articles

我发现处理这个问题可以通过修改 Strapi 目录中的控制器来解决,但我还没有完全弄清楚。

Strapi 控制器文档

这里有人知道这个问题的解决方案吗?

小智 0

首先,您需要一个自定义控制器功能。您/api/homepage/controllers/homepage.js可以导出自定义查找功能。

您可以在此处定义要填充的字段:

module.exports = {
 find: ctx => {
   return strapi.query('homepage').find(ctx.query, [
     {
       path: 'displayedArticles',
       populate: {
         path: 'category',
       },
     },
   ]);
 }
};
Run Code Online (Sandbox Code Playgroud)

作为参考,请参阅最新的测试版文档: 自定义

第二种方式:按要求填写

module.exports = {
 find: ctx => {
   return strapi.query('homepage').find(ctx.query, [
     {
       path: 'displayedArticles',
       populate: {
         path: 'category',
       },
     },
   ]);
 }
};
Run Code Online (Sandbox Code Playgroud)