本质上我想要完成的是:
默认情况下,如果没有传递“includes”查询参数,我只想将模型中的所有内容填充到下一层,以包含所有组件、关系等。我知道这可以通过“populate:星星”。但是,如果在包含中传递字段/对象/数组,我仍然希望将所有内容填充到下一级(即“填充:星号”),但最重要的是,我想包含在包含中传递的任何内容也仅查询参数。这对我来说不起作用,因为第二次填充总是覆盖“填充:'*'”。彻底浏览了 Strapi 文档后,我没有看到任何方法可以结合这两种场景,那么完成这样的事情以动态处理多级深度填充但仅针对指定关系的最佳方法是什么?最佳答案
您还可以在中间件中预定义填充逻辑,以填充内容的所有项目。但您也可以通过从前端传递的查询参数进行覆盖。
这是一个示例中间件。我没有实现您正在寻找的确切逻辑,但这可以给您一些想法。
"use strict";
/**
* `landing-page-populate` middleware
*/
const populate = {
metadata: {
populate: {
metaImage: {
populate: true,
fields: ["name", "alternativeText", "url"],
},
},
},
blocks: {
populate: {
link: {
populate: true,
},
image: {
fields: ["name", "alternativeText", "url"],
},
card: {
populate: {
image: {
fields: ["name", "alternativeText", "url"],
},
},
},
plan: {
populate: ["services", "link"],
},
form: {
populate: ["input", "button"],
},
},
},
};
module.exports = (config, { strapi }) => {
// Add your own logic here.
return async (ctx, next) => {
strapi.log.info("In landing-page-populate middleware.");
ctx.query = {
populate,
...ctx.query,
}
await next();
};
};
如果您想了解如何在中间件中处理填充的另一个示例,请查看此博客文章。 https://strapi.io/blog/route-based-middleware-to-handle-default-population-query-logic
如果您需要回顾一下 Strapi 中如何完成填充和过滤,您还可以查看这篇关于填充和过滤的文章 https://strapi.io/blog/demystifying-strapi-s-populate-and-filtering
关于strapi - 在 Strapi v4 中自定义填充的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77052492/