我正在使用Strapi v4,在API响应中填充嵌套的可重复组件时遇到了问题。我在另一个组件faqs
中有一个可重复组件faq_item
。但是,当我尝试在自定义控制器中使用populate
选项填充faq_item
时,它不会返回嵌套数据。
下面是我的组件的结构:
klubr_house
(集合类型)club_presentation
(动态区域)faqs
(组件)faq_item
(可重复组件)
下面是我的控制器的findOne
方法:
"use strict";
const { createCoreController } = require("@strapi/strapi").factories;
module.exports = createCoreController("api::klubr.klubr", ({ strapi }) => ({
async findOne(ctx) {
const { id } = ctx.params;
const entity = await strapi.db.query("api::klubr.klubr").findOne({
where: { slug: id },
populate: {
klubr_house: {
populate: {
club_presentation: {
populate: {
faqs: {
populate: {
faq_item: true, // This should populate all fields within each faq_item
},
},
// ... other fields
},
},
// ... other relations
},
},
// ... other fields
},
});
const sanitizedEntity = await this.sanitizeOutput(entity, ctx);
return this.transformResponse(sanitizedEntity);
},
}));
字符串
1条答案
按热度按时间bybem2ql1#
我想出了解决办法
解决方法:
我修改了自定义控制器中klubr内容类型的findOne方法。关键是创建一个递归函数getFullPopulateObject,该函数为Strapi的查询系统构造一个完整的填充对象。该函数考虑不同的字段类型,如组件,动态区域,关系和媒体。
字符串
这种方法成功地填充了findOne查询中的所有相关字段。我希望这个解决方案可以帮助其他使用Strapi中自定义控制器的人。