Last active
June 3, 2022 14:53
-
-
Save jeromecoupe/b224567a3c88f43075e5b3fee32f3999 to your computer and use it in GitHub Desktop.
When to eager load
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{# | |
Use case a podcast website: | |
- programs (have asset and categories) | |
- episodes (relation source) | |
#} | |
{# get all programs Ids #} | |
{% set allProgramsIds = craft.entries() | |
.section("programs") | |
.limit(null) | |
.ids() %} | |
{# get all episodes Ids #} | |
{# avoids edge cases where a program would be deleted, | |
leaving episodes without relations, which crashes the system #} | |
{% set allEpisodesIds = craft.entries() | |
.section("episodes") | |
.limit(null) | |
.relatedTo(allProgramsIds) | |
.ids() %} | |
{# get all programs that have at least one episode (eager load image and category) #} | |
{% set allPrograms = craft.entries() | |
.section("programs") | |
.with([ | |
"programImage", | |
"programThemes" | |
]) | |
.relatedTo(allEpisodesIds) | |
.orderBy("title ASC") | |
.limit(perPage) %} | |
{# paginate programs #} | |
{% paginate allPrograms as pagination, programs %} | |
{# loop and include component #} | |
{% for item in programs %} | |
{% include "_components/program.twig" with { | |
entry: item | |
} only %} | |
{% endfor %} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Raw SQL query generated
SELECT
elements
.id
,elements
.canonicalId
,elements
.fieldLayoutId
,elements
.uid
,elements
.enabled
,elements
.archived
,elements
.dateLastMerged
,elements
.dateCreated
,elements
.dateUpdated
,elements_sites
.id
ASsiteSettingsId
,elements_sites
.slug
,elements_sites
.siteId
,elements_sites
.uri
,elements_sites
.enabled
ASenabledForSite
,entries
.sectionId
,entries
.typeId
,entries
.authorId
,entries
.postDate
,entries
.expiryDate
,content
.id
AScontentId
,content
.title
,content
.field_addressCity_lgwwikij
,content
.field_addressMapUrl_shkzfwbx
,content
.field_addressNumber_yvyhwguw
,content
.field_addressPostcode_kyllaptb
,content
.field_addressStreet_onetplkt
,content
.field_addressText_vtxwynxw
,content
.field_commonBody_ctnocsxo
,content
.field_commonMinimalBody_jurpvclp
,content
.field_companyEmail_haftzimf
,content
.field_companyName_ixgtcsgz
,content
.field_companyVAT_mdojpkus
,content
.field_episodeId_betqvldv
,content
.field_facebookUrl_hgylpkjx
,content
.field_teamFunction_gxxtfynl
,content
.field_instagramUrl_pmmelorh
,content
.field_liveUrl_fskopxgj
,content
.field_partnerName_yggixczj
,content
.field_teamName_ujaiubjt
,content
.field_navLabel_jrkmcjsy
,content
.field_episodeService_jyfxqfeb
,content
.field_programSchedule_nvnpxrpn
,content
.field_seoDescription_eufrflfu
,content
.field_seoTitle_nfqijwsa
,content
.field_commonShortSummary_lerfazkd
,content
.field_commonSummary_dnhcjfqu
,content
.field_homeSuptitle_vbzfeypc
,content
.field_teamSurname_ufmdmkvz
,content
.field_commonMediumTitle_lqbrwmuz
,content
.field_commonShortTitle_vpbyvdxy
,content
.field_commonTitle_nfzweczc
,content
.field_twitterUrl_egodmsrz
,content
.field_programUrlApple_yggnepfj
,content
.field_programUrlRss_ugljsupf
,content
.field_programUrlSpotify_vljheckj
,content
.field_partnerUrl_ifoqyqbi
FROM (SELECTelements
.id
ASelementsId
,elements_sites
.id
ASelementsSitesId
,content
.id
AScontentId
FROMelements
elements
INNER JOINentries
entries
ONentries
.id
=elements
.id
INNER JOINelements_sites
elements_sites
ONelements_sites
.elementId
=elements
.id
INNER JOINcontent
content
ONcontent
.elementId
=elements
.id
WHERE (entries
.sectionId
=4) AND (elements
.archived
=FALSE) AND (((elements
.enabled
=TRUE) AND (elements_sites
.enabled
=TRUE)) AND (entries
.postDate
<= '2022-06-03 14:52:26') AND ((entries
.expiryDate
IS NULL) OR (entries
.expiryDate
> '2022-06-03 14:52:26'))) AND (elements
.dateDeleted
IS NULL) AND ((elements
.id
IN (SELECTsources17
.targetId
FROMrelations
sources17
WHEREsources17
.sourceId
IN ('366', '301', '160', '91', '89', '72', '34', '70'))) OR (elements
.id
IN (SELECTtargets17
.sourceId
FROMrelations
targets17
WHEREtargets17
.targetId
IN ('366', '301', '160', '91', '89', '72', '34', '70')))) AND (elements
.draftId
IS NULL) AND (elements
.revisionId
IS NULL) ORDER BYtitle
LIMIT 18)subquery
INNER JOINelements
elements
ONelements
.id
=subquery
.elementsId
INNER JOINelements_sites
elements_sites
ONelements_sites
.id
=subquery
.elementsSitesId
INNER JOINentries
entries
ONentries
.id
=subquery
.elementsId
INNER JOINcontent
content
ONcontent
.id
=subquery
.contentId
ORDER BYtitle