🛠️ How to populate creator fields such as createdBy and updatedBy
The creator fields createdBy and updatedBy are removed from the REST API response by default. These 2 fields can be returned in the REST API by activating the populateCreatorFields parameter at the content-type level.
The populateCreatorFields property is not available to the GraphQL API.
To add createdBy and updatedBy to the API response:
Open the content-type
schema.jsonfile.Add
"populateCreatorFields": trueto theoptionsobject:"options": {
"draftAndPublish": true,
"populateCreatorFields": true
},Save the
schema.json.Open the controller
[collection-name].jsfile inside the corresponding API request.Add the following piece of code, and make sure you replace the
[collection-name].jswith proper collection name:'use strict';
/**
* [collection-name] controller
*/
const { createCoreController } = require('@strapi/strapi').factories;
module.exports = createCoreController('api::[collection-name].[collection-name]', ({ strapi }) => ({
async find(ctx) {
// Calling the default core action
const { data, meta } = await super.find(ctx);
const query = strapi.db.query('api::[collection-name].[collection-name]');
await Promise.all(
data.map(async (item, index) => {
const foundItem = await query.findOne({
where: {
id: item.id,
},
populate: ['createdBy', 'updatedBy'],
});
data[index].attributes.createdBy = {
id: foundItem.createdBy.id,
firstname: foundItem.createdBy.firstname,
lastname: foundItem.createdBy.lastname,
};
data[index].attributes.updatedBy = {
id: foundItem.updatedBy.id,
firstname: foundItem.updatedBy.firstname,
lastname: foundItem.updatedBy.lastname,
};
})
);
return { data, meta };
},
}));
REST API requests using the populate parameter that include the createdBy or updatedBy fields will now populate these fields.