Skip to main content
Unlisted page
This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

Populating with the Entity Service API

Caution

The Entity Service API will be deprecated in Strapi v5. Please consider using the Document Service API instead.

The Entity Service API does not populate relations, components or dynamic zones by default, which means an Entity Service API query that does not use the populate parameter will not return information about relations, components, or dynamic zones.

Basic populating

To populate all the root level relations, use populate: '*':

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

Populate various component or relation fields by passing an array of attribute names:

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

Advanced populating

An object can be passed for more advanced populating:

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

Complex populating can be achieved by using the filters parameter and select or populate nested relations or components:

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

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

Populate fragments

When dealing with polymorphic data structures (dynamic zones, polymorphic relations, etc...), it is possible to use populate fragments to have a better granularity on the populate strategy.

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'],
},
},
},
},
});