Skip to main content

Populating with the Entity Service API

Caution

The content of this page has not been updated to Strapi v5 yet.

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