[salesforce]SOQLで子リレーションの情報を取得する
SOQLにて、あるオブジェクトの子リレーションになっているオブジェクトの情報を取得したい場合の話です。
子オブジェクトの参照名は、カスタムオブジェクトの場合は、__r
となっていて、
標準オブジェクトは、お尻にs
をつける形となっています。(だいたい)
今回はあまり例で見ることのなかった、campaign
、campaignmember
で例を示します。
とあるキャンペーンのキャンペーンメンバーのデータを取得する場合、以下のようなSOQLで取得できます。
Select id, (Select cm.id From CampaignMembers cm) From Campaign
これを開発者コンソールの、Query Editorで実行してみると、以下の様なデータが取得できます。
(1レコード例)
id: 701O00000007osrIAA
CampaignMembers: [{"Id":"00vO0000002B00XIAS"},{"Id":"00vO0000002B00SIAS"}]
これをapex上で使用するには、CampaignMmber
が配列で入ってくるので、
for文で回して取得してやる必要があります。
以下は、3つのcampaignID
から取得したデータのCampaignMember
のstatus
を取得しています。
List<String> campid = new List<String>();
campid.add('701O00000007orzIAA');
campid.add('701O00000007osrIAA');
campid.add('701O00000007l1sIAA');
String soql_c = 'SELECT id,type, (Select Status From CampaignMembers) FROM Campaign WHERE id=:campid';
List<Campaign> campRes;
campRes = Database.query(soql_c);
for(Campaign cdata : campRes){
for(CampaignMember cmdata : cdata.CampaignMembers){
System.debug(cmdata.Status);
}
}