概要
上記ツイートの通り、child-to-parentのrelationship queryで五階層上までの情報を取得することが可能であるのに対して、parent-to-childのrelationship queryでは一階層下までの情報しか取得することができません。
この記事では、「商談」を手掛かりに「品目名スケジュール」を取得するというユースケースを手掛かりに、親の情報を基に子を辿っていく方法について解説します。
Bad Example(親から順に回す)
List<Opportunity> oppList =[SELECT id FROM opportunity];
for(Opportunity opp: oppList){
List<OpportunityLineItem> oliList = [SELECT id FROM OpportunityLineItem];
for(OpportunityLineItem oli: oliList){
List<OpportunityLineItemSchedule> olisList=[SELECT id FROM portunityLineItemSchedule];
~
}
}
「Too many SOQL queries: 101」エラー(´・ω・`)
Good Example1(子から親を取る形で書く)
SELECT opportunitylineitem.opportunity.id,opportunitylineitem.id,id FROM OpportunityLineItemSchedule;
逆転の発想。
WHERE句もopportunitylineitem.opportunity.~などを利用すればどの階層でも絞れちゃうので、これでOK✌
Fairly good example
SELECT id, Opportunity.id,( SELECT id from OpportunityLineItemSchedules) from OpportunityLineItem
二層目から親と子を両方取りにいくパターン。
WHERE句の兼ね合い次第ではこれでもOK