Found the solution based on this topic..
Default logic is create the inner objects, then attach a reference to those inner objects (their unique id’s) in the outer/parent object POST.
However, this means that you would need to make x number of inner object POSTS, get their id’s, temporary store and include them in another outer/parent object POST. So if you had 10 inner objects, you would end up making 10 POST requests + 1 for outer/parent object POST.
I wanted to do this as it was more elegant and you don’t burden the front-end with dictating the request structure. This method exposes only 1 POST request at outer/parent object level and returns the output correctly as 1 object. BUT technically, it still makes 10 inner object POST’s in the backend.
Continuing on with the example in the link above:
'use strict';
const { parseMultipartData, sanitizeEntity } = require('strapi-utils');
// /**
// * Read the documentation (https://strapi.io/documentation/developer-docs/latest/development/backend-customization.html#core-controllers)
// * to customize this controller
// */
module.exports = {
/**
* Create a record.
*
* @return {Object}
*/
async create(ctx) {
let newArticle = ctx.request.body
let entity;
let newTags = [];
// Loop through inner tags if they exist.
if (newArticle.tags.length > 0) {
for (let i = 0; i < newArticle.tags.length; i++) {
// 'tag' refers to model file name, in this case tag.js
// by default, strapi takes the entire object, unless specified ( name: newArticle.tags[I].tag_name)
let newTag = await strapi.query('tag').create(newArticle.tags[i])
newTags.push(newTag.id) // use these id's in parent POST
}
newArticle.tags = newTags // now it has id's from inner objects to push into parent object and reference table in db.
}
if (ctx.is('multipart')) {
// need to adjust this for the tags, right now it will break
const { data, files } = parseMultipartData(ctx);
entity = await strapi.services.article.create(data, { files });
} else {
// pass the new request body with the proper array of IDs and create the article
entity = await strapi.services.article.create(newArticle);
}
return sanitizeEntity(entity, { model: strapi.models.article });
},
};