Search code examples
strapi

Strapi CMS: Fetch Nested Content


I am using Strapi CMS and struggling with fetching the nested/deep content’s data. E.g.: Let’s say, I have below content types created and relations are defined.

Person: Name, Age

Address: City, Country

Contact: Code, Number

Person has one Address

Address has many Contacts

Now the problem is, when I access ‘/persons’, I get only Name, Age and Address object. But address object does not have the contact information associated with the address.

Can somebody help me to get this resolved or point me towards any such article?


Solution

  • Firstly you'll need a custom controller function for this. In /api/person/controllers/Person.js you can export your custom find function. There you can define which fields you want to populate:

    module.exports = {
      find: ctx => {
        return strapi.query('person').find(ctx.query, ['address', 'contact']);
      },
    };
    

    Another solution works for me as well:

    module.exports = {
      find: ctx => {
        return strapi.query('person').find(ctx.query, [
           { path: 'address' },
           { path: 'contact' },
        ]);
      },
    };
    

    Edited example with one level deeper populate:

    module.exports = {
      find: ctx => {
        return strapi.query('person').find(ctx.query, [
          {
            path: 'address',
            populate: {
              path: 'contacts',
            },
          },
        ]);
      },
    };
    

    For reference see the most recent beta docs:

    https://strapi.io/documentation/3.0.0-beta.x/concepts/queries.html#api-reference