[salesforce]SOQLで子リレーションの情報を取得する

SOQLにて、あるオブジェクトの子リレーションになっているオブジェクトの情報を取得したい場合の話です。

子オブジェクトの参照名は、カスタムオブジェクトの場合は、__rとなっていて、
標準オブジェクトは、お尻にsをつける形となっています。(だいたい)

今回はあまり例で見ることのなかった、campaigncampaignmemberで例を示します。

とあるキャンペーンのキャンペーンメンバーのデータを取得する場合、以下のような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から取得したデータのCampaignMemberstatusを取得しています。

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);
    }
}

参考

セールスフォースの豆知識: SOQLでのリレーションの辿り方

   このエントリーをはてなブックマークに追加