Populate deleted components and repeatable components

Hello everyone,

1.

I have a LANDING PAGE model.

2.

As you can see this model has relation with PROGRAMMES.

This PROGRAMME relation has few components and repeatable components inside of it which work out of the box.

The problem arose when I realized that the nested relations inside of programmes don’t show up, so I followed @derrickmehaffy solution from here

As you can see below on the image, this fixed the deeply nested relations.

This was the code that I used to fix this:

    let populate = [
      "programmes",
      "programmes.locations",
      "programmes.certification",
      "programmes.study_modes",
      "programmes.degree_level",
      "programmes.verticals",
    ];
    let entity = await strapi.services["landing-page"].findOne(
      ctx.query,
      populate
    );
    let data = sanitizeEntity(entity, { model: strapi.models["landing-page"] });
    return data;
  },

PERFECT!

3.

BUT THERE IS A CATCH

Now, where the issue happened? When I used the populate method all of the components and repeatable components that were there before - inside of the relation with the programme, simply disappeared from the object.

As you can see below are the components that vanished after populate.

4.

I have tried to do something like this:

    let populate = [
      "programmes",
      "programmes.locations",
      "programmes.certification",
      "programmes.study_modes",
      "programmes.degree_level",
      "programmes.verticals",
      "programmes.pSpecialisations",
      "programmes.ctaButton",
      "programmes.overviewSection",
    ];
    let entity = await strapi.services["landing-page"].findOne(
      ctx.query,
      populate
    );
    let data = sanitizeEntity(entity, { model: strapi.models["landing-page"] });
    return data;
  },

But it didn’t work, since as from what I understood in @DMehaffy comment is that populate is only working for relational fields.

Does anyone have an idea how to fix this?

In the v3, currently, no. This is an issue we will be fixing with our v4. For now you would need to build a complex custom query directly with the ORM.

It seems that the issue is coming from strapi-connector-bookshelf, in populate.js file

In formatPopulateOptions, if the attribute is a “component” there is a continue, so the attribute is not added.

Adding the following code juste before the continue, seems to fix the issue.

_.extend(acc, {
          [newKey]: extendWithPopulateQueries(
            [obj[newKey], acc[newKey]],
            queryOptionsToQueryMap(queryOptions, { model: tmpModel })
          ),
        });
        
        continue;

There is also a “workaround”, if you add a dummy relation field in your “component field”.
You can populate it

For exemple
“programmes.study_modes.dummy”.