メモ。
標準オブジェクトの場合と、カスタムオブジェクトの場合について整理。
こちらの公式ドキュメントが参考になる。
標準オブジェクト
上の例では標準オブジェクトであるAccount
とContact
について書かれており、
親(Parent)が Account
、子(Child)が Contact
という位置づけになる。
Child-to-parent:子 (Contact) から親 (Account) を参照
SELECT Id, Name, Account.Id, Account.Name FROM Contact
親のSObject名.親の項目名
で親の項目を取得できる。
Parent-to-child:親 (Account) から子 (Contact) を参照
SELECT Id, Name, (SELECT Id FROM Contacts) FROM Account
ちなみに、親から子を参照する場合、子から親を参照する場合の API 参照名については
子の参照関係項目を見るとわかる。
取引先責任者 > 項目 > 取引先名
カスタムオブジェクト
ここでは、参照関係にある2つのカスタムオブジェクトを考える。
親オブジェクト:ParentObj__c 子オブジェクト:ChildObj__c
どっちが親でどっちが子かというと、参照関係の項目を作った方が子 です。
Child-to-parent:子(ChildObj__c)から親(ParentObj__c)を参照
SELECT Id, Name, ParentObj__c, ParentObj__r.name FROM ChildObj__c
ParentObj__c
で取れるのは Id のみ。Id 以外の項目を取る時は __c
でなく __r
にする。
Parent-to-child:親(ParentObj__c)から子(ChildObj__c)を参照
SELECT Id, Name, (SELECT Id, Name FROM [子リレーション名]__r) FROM ParentObj__c
子リレーション名は参照関係の項目を作成するときに決める。
通常複数形にすることが多い。
Apexコードでの利用例
子(ChildObj__c)から親(ParentObj__c)を参照
List<ChildObj__c> children = [SELECT Id, Name, ParentObj__c, ParentObj__r.name FROM ChildObj__c];
// 親オブジェクトのnameフィールドの値を表示
System.debug(children.parentObj__r.name);
親(ParentObj__c)から子(ChildObj__c)を参照
List<ParentObj__c> parents = [SELECT Id, Name, (SELECT Id, Name FROM ChildObjs__r) FROM ParentObj__c]; // 子オブジェクトのnameフィールドの値を表示 for (ChildObj__c child : parents.childObjs__r) { System.debug(child.name); }
注意点は、子オブジェクトはList
で渡されるというところぐらい。