填充查询 Populating

使用 Strapi 的实体服务 API 来填充查询中的关系。

Entity Service API 默认不填充关系、组件或动态区域。

基本填充

要填充所有根级关系,请使用 populate: '*'

js
const entries = await strapi.entityService.findMany('api::article.article', {
  populate: '*',
})

通过传递属性名称数组来填充各种组件或关系字段:

js
const entries = await strapi.entityService.findMany('api::article.article', {
  populate: ['componentA', 'relationA'],
})

高级填充

可以传递一个对象以进行更高级的填充:

js
const entries = await strapi.entityService.findMany('api::article.article', {
  populate: {
    relationA: true,
    repeatableComponent: {
      fields: ['fieldA'],
      filters: {},
      sort: 'fieldA:asc',
      populate: {
        relationB: true,
      },
    },
  },
})

可以使用 filters 参数 并选择或填充嵌套关系或组件来实现复杂填充:

js
const entries = await strapi.entityService.findMany('api::article.article', {
  populate: {
    relationA: {
      filters: {
        name: {
          $contains: 'Strapi',
        },
      },
    },

    repeatableComponent: {
      fields: ['someAttributeName'],
      sort: ['someAttributeName'],
      populate: {
        componentRelationA: true,
      },
    },
  },
})

填充片段

处理多态数据结构(动态区域、多态关系等)时,可以使用填充片段来更好地确定填充策略。

js
const entries = await strapi.entityService.findMany('api::article.article', {
  populate: {
    dynamicZone: {
      on: {
        'components.foo': {
          fields: ['title'],
          filters: { title: { $contains: 'strapi' } },
        },
        'components.bar': {
          fields: ['name'],
        },
      },
    },

    morphAuthor: {
      on: {
        'plugin::users-permissions.user': {
          fields: ['username'],
        },
        'api::author.author': {
          fields: ['name'],
        },
      },
    },
  },
})