Suppose we have the following in schema:
- country
- homepage
- topics
- sources
- sections
- articles
And this is how they are related
- homepage
has one
country. - homepage
has many
topics. - homepage
has many
sources. - topics
belongs to many
sections. - sources
belongs to many
sections. - sections
belongs to many
articles.
Requirement:
Get top 10 the articles for homepage having country id as countryId
sorted by attribute_name
.
My Approach:
async function findTopArticleByCountryId({ countryId, sortBy = 'likeCount' }) {
try {
const response = await strapi.connections.default.raw(
`SELECT * FROM articles WHERE section IN (
SELECT id FROM sections WHERE
topic IN (
SELECT id FROM topics WHERE homepage IN (
SELECT id FROM homepage WHERE country = ${countryId}
)
)
OR service IN (
SELECT id FROM sources WHERE homepage IN (
SELECT id FROM homepage WHERE country = ${countryId}
)
)
) ORDER BY ${sortBy} DESC LIMIT 10;`
);
const [articles] = response;
//sanitize articles entity
return articles;
} catch (e) {
console.log(e);
return false;
}
}
Let's discuss your approach in the discussion box or you can hit me up at aastha.talwaria29@gmail.com.
Thanks for reading.
Top comments (0)