+ Start a Discussion
citydivercitydiver 

主従関係のデータ取得について

主従関係のデータ取得についてお尋ねします。

 

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%'

MFuruMFuru

SOQLで子オブジェクトから親オブジェクトは取得可能です。

どんなエラーが出てますか?

takahiro-yoneitakahiro-yonei

子オブジェクトから親オブジェクトの項目を使ってデータを取得することはできます。

親子関係のオブジェクトを使って、サンプルにあったようなSOQLを発行してみましたが、問題なくデータは取得できました。

 

該当のSOQLの例では、以下のような前提条件があると理解しています。

 

  • 該当するカスタムオブジェクトは以下の2つである

 親:Mother_of_Child__c

 子:Daughter__c

 

  • 親オブジェクトのLastName__cが「C」から始まる子オブジェクトを検索している

 

ちなみに、SOQLを発行したとき、どのようなエラーメッセージが返ってきましたでしょうか?

※エラーになる、といった場合には、エラーメッセージも併せて記載した方がエラー内容がすぐに共有できると思います。。

 

よろしくお願いします。

citydivercitydiver

お世話になります。

 

エラーメッセージですが、

 

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%’)では、問題なくデータを取得できています。

minoawminoaw

子リレーション名はparent-to-childの時にのみ使用される名前で、

child-to-parent のときは関係ありません。

 

child-to-parentのSOQLで親項目を指定する部分には

親と紐付く参照/主従項目のAPI参照名(カスタムの場合は最後の__cを__rにする)と

取得する親オブジェクトの項目名をドットで繋いだ形になります。

 

2つのオブジェクトを紐付ける参照/主従項目のAPI参照名は 「Mother_of_Child__c」になっていますか?

takahiro-yoneitakahiro-yonei

すみません。1点勘違いして投稿してました。。

 

(誤)

  • 該当するカスタムオブジェクトは以下の2つである

 親:Mother_of_Child__c

 子:Daughter__c

 

(正)

  • 子オブジェクトから親オブジェクトへの参照項目が「Mother_of_Child__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. 子オブジェクトから親オブジェクトを参照するときのリレーション
  2. 親オブジェクトから子オブジェクトを参照するときのリレーション

このケースでは、「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.」のリレーションに該当します。

 

先の投稿で、当方の勘違いが一部ありました。すみません。。

以上、よろしくお願いします。

 

citydivercitydiver

ご回答ありがとうございます。>ALL

 

ご指摘の通り、「親と紐付く参照/主従項目のAPI参照名(カスタムの場合は最後の__cを__rにする」という部分を

まったく勘違いして理解していました。

 

ありがとうございました。