如何在Strapi中通过查询获取关联关系的深层属性?
Strapi Entity Service 获取深层关联数据的解决方案
populate: '*'只能展开第一层关联关系,要获取嵌套的最深层级关联,有两种可行方案:
1. 手动指定嵌套关联结构
直接在populate里逐层定义需要展开的关联字段,比如你的name模型关联了category,category又关联了tag,可以这么写:
const entries = await strapi.entityService.findMany(api::name.name, { populate: { category: { populate: { tag: { populate: '*' // 若tag还有更深层关联,继续嵌套定义即可 } } }, // 其他需要展开的关联字段也按这个格式添加 } });
这种方式能精准控制每个关联字段的展开范围,避免不必要的数据查询。
2. 使用深度参数(Strapi 4.11+版本支持)
如果你的Strapi版本是4.11及以上,可以用deep参数指定递归展开的层级,不用手动写嵌套结构:
const entries = await strapi.entityService.findMany(api::name.name, { populate: { '*': { deep: 3 // 这里的数字代表要展开的层级,比如3层就会递归获取到第三层关联数据 } } });
注意事项
- 不要盲目设置过大的
deep值,层级过深会导致查询性能下降,返回的数据量也会激增 - 可以混合两种方式,比如对特定字段单独设置深度,其他字段用通配符:
populate: { category: { deep: 2 }, '*': { deep: 1 } }
内容的提问来源于stack exchange,提问作者Muhammad Shafaat Khan
相关产品推荐
相关产品推荐

