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.idASsiteSettingsId,elements_sites.slug,elements_sites.siteId,elements_sites.uri,elements_sites.enabledASenabledForSite,entries.sectionId,entries.typeId,entries.authorId,entries.postDate,entries.expiryDate,content.idAScontentId,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_ifoqyqbiFROM (SELECTelements.idASelementsId,elements_sites.idASelementsSitesId,content.idAScontentIdFROMelementselementsINNER JOINentriesentriesONentries.id=elements.idINNER JOINelements_siteselements_sitesONelements_sites.elementId=elements.idINNER JOINcontentcontentONcontent.elementId=elements.idWHERE (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.expiryDateIS NULL) OR (entries.expiryDate> '2022-06-03 14:52:26'))) AND (elements.dateDeletedIS NULL) AND ((elements.idIN (SELECTsources17.targetIdFROMrelationssources17WHEREsources17.sourceIdIN ('366', '301', '160', '91', '89', '72', '34', '70'))) OR (elements.idIN (SELECTtargets17.sourceIdFROMrelationstargets17WHEREtargets17.targetIdIN ('366', '301', '160', '91', '89', '72', '34', '70')))) AND (elements.draftIdIS NULL) AND (elements.revisionIdIS NULL) ORDER BYtitleLIMIT 18)subqueryINNER JOINelementselementsONelements.id=subquery.elementsIdINNER JOINelements_siteselements_sitesONelements_sites.id=subquery.elementsSitesIdINNER JOINentriesentriesONentries.id=subquery.elementsIdINNER JOINcontentcontentONcontent.id=subquery.contentIdORDER BYtitle