You need to sign in to do that
Don't have an account?
citydiver
主従関係のデータ取得について
主従関係のデータ取得についてお尋ねします。
SOQLではカスタムオブジェクトであっても、「子オブジェクトから親オブジェクトへのリレーション」と「親オブジェクトから子オブジェクトへのリレーション」が可能だと理解しています。
そこで、Force.com SOQL and SOSL Reference (http://www.salesforce.com/us/developer/docs/soql_sosl/Content/sforce_api_calls_soql_select_examples.htm)のRelationship query: child-to parent with custom objectsの項目に記載されている例文を試してみたのですが、エラーになってます。子オブジェクトから親オブジェクトに遡ってデータを取得することはできないのでしょうか?
該当のSOQL:
SELECT Id, FirstName__c, Mother_of_Child__r.FirstName__c FROM Daughter__c WHERE Mother_of_Child__r.LastName__c LIKE 'C%'
SOQLで子オブジェクトから親オブジェクトは取得可能です。
どんなエラーが出てますか?
子オブジェクトから親オブジェクトの項目を使ってデータを取得することはできます。
親子関係のオブジェクトを使って、サンプルにあったようなSOQLを発行してみましたが、問題なくデータは取得できました。
該当のSOQLの例では、以下のような前提条件があると理解しています。
親:Mother_of_Child__c
子:Daughter__c
ちなみに、SOQLを発行したとき、どのようなエラーメッセージが返ってきましたでしょうか?
※エラーになる、といった場合には、エラーメッセージも併せて記載した方がエラー内容がすぐに共有できると思います。。
よろしくお願いします。
お世話になります。
エラーメッセージですが、
Didn't understand relationship 'Mother_of_Child__r' in field path. If you are attempting to use a custom relationship, be sure to append the '__r' after the custom relationship name. Please reference your WSDL or the describe call for the appropriate names.
というものです。cutom relationship というのは、子リレーション名のことを指しているんですよね?実はオブジェクトを作成し、データ投入後に子リレーション名を変更しているのですが、そのあたりに問題でもあるのでしょうか?ちなみに子リレーション名には’__r’を付けています。
また、Relationship query: parent to child with custom objects の構文(SELECT Name, (SELECT Name FROM Line_Items__r) FROM Merchandise__c WHERE Name LIKE ‘Acme%’)では、問題なくデータを取得できています。
子リレーション名はparent-to-childの時にのみ使用される名前で、
child-to-parent のときは関係ありません。
child-to-parentのSOQLで親項目を指定する部分には
親と紐付く参照/主従項目のAPI参照名(カスタムの場合は最後の__cを__rにする)と
取得する親オブジェクトの項目名をドットで繋いだ形になります。
2つのオブジェクトを紐付ける参照/主従項目のAPI参照名は 「Mother_of_Child__c」になっていますか?
すみません。1点勘違いして投稿してました。。
(誤)
親:Mother_of_Child__c
子:Daughter__c
(正)
でした。
親オブジェクトのAPI名は分かりませんが、子オブジェクト側で親オブジェクトを参照している項目のAPI名が、上記の名称となる想定だと思います。
元々のSOQLでは、子オブジェクト側から親オブジェクトのLastName__cを参照するのに、
... Where Mother_of_Child__r.LastName__c Like ...
と記述している、ということになります。
子オブジェクトから親オブジェクトの項目を参照するには、子オブジェクトから親オブジェクトを参照するAPI名の最後を「__c」→「__r」と変更すればよいです。
例)
親オブジェクトの参照名: Parent__c だった場合
→ 親オブジェクトへのリレーション: Parent__r となります
> cutom relationship というのは、子リレーション名のことを指しているんですよね?
custom relationshipは子リレーションだけではなく、その逆のパターンもあります。
このケースでは、「1.」が該当します。
> また、Relationship query: parent to child with custom objects の構文(SELECT Name, (SELECT Name FROM Line_Items__r) FROM Merchandise__c WHERE Name LIKE ‘Acme%’)では、問題なくデータを取得できています。
このSOQLで使用しているリレーション名: Line_Items__r は上記でいう「2.」のリレーションに該当します。
先の投稿で、当方の勘違いが一部ありました。すみません。。
以上、よろしくお願いします。
ご回答ありがとうございます。>ALL
ご指摘の通り、「親と紐付く参照/主従項目のAPI参照名(カスタムの場合は最後の__cを__rにする」という部分を
まったく勘違いして理解していました。
ありがとうございました。