子と親のリレーション

GraphQL ワイヤアダプタのクエリでは、親または子とのリレーションを指定できます。

子のリレーション 

複数のオブジェクトが、同じオブジェクトに対して子リレーションを持つことができます。たとえば、親取引先には、子リレーションを指定できます。一部のオブジェクトには、別のオブジェクトへのリレーションを指定することもできます。たとえば、取引先には、他のオブジェクトの納入商品、ケース、取引先責任者などと子リレーションが設定できます。

子リレーションを照会するには、親の node に子リレーションの名前と項目を渡します。GraphQL ワイヤアダプタでは、1 レベルの子リレーションしかサポートされていません。たとえば、取引先レコードの取引先責任者を要求できますが、その取引先責任者の子リレーションは要求できません。

応答の子リレーションレコードはページ設定され、カーソルとページ設定情報を含みます。

子リレーションを含むクエリを作成するには、GraphQL ワイヤアダプタの query パラメータを使用します。

1query operationName {
2  uiapi {
3    query {
4      Account (where: { Name: { eq: "United Oil" }}) {
5        edges {
6          node {
7            Id
8            Name {
9              value
10            }
11            Contacts ( first: 5 ) {
12              edges {
13                node {
14                  Name { value }
15                }
16              }
17              totalCount
18              pageInfo {
19                hasNextPage
20              }
21            }
22          }
23        }
24      }
25    }
26  }
27}

応答は、次のようになります。

1{
2  "data": {
3    "uiapi": {
4      "query": {
5        "Account": {
6          "edges": [
7            {
8              "node": {
9                "Id": "001RM000005Zcl6YAC",
10                "Name": {
11                  "value": "United Oil"
12                },
13                "Contacts": {
14                  "edges": [
15                    {
16                      "node": {
17                        "Name": {
18                          "value": "Pat Stumuller"
19                        }
20                      }
21                    },
22                    {
23                      "node": {
24                        "Name": {
25                          "value": "Stella Pavlova"
26                        }
27                      }
28                    },
29                    {
30                      "node": {
31                        "Name": {
32                          "value": "Lauren Boyle"
33                        }
34                      }
35                    },
36                    {
37                      "node": {
38                        "Name": {
39                          "value": "Jane Grey"
40                        }
41                      }
42                    },
43                    {
44                      "node": {
45                        "Name": {
46                          "value": "Arthur Song"
47                        }
48                      }
49                    }
50                  ],
51                  "totalCount": 11,
52                  "pageInfo": {
53                    "hasNextPage": true
54                  }
55                }
56              }
57            }
58          ]
59        }
60      }
61    }
62  },
63  "errors": []
64}

親リレーション 

親リレーションを照会するには、子の node に親リレーションの名前と項目を渡します。GraphQL ワイヤアダプタは、1 レベルの親リレーションを返します。子リレーションとは異なり、複数レベルの親リレーションを要求できます。たとえば、商談に関連付けられた取引先所有者の名前を要求します。

親リレーションを含むクエリを作成するには、GraphQL ワイヤアダプタの query パラメータを使用します。

1query operationName {
2  uiapi {
3    query {
4      Opportunity {
5        edges {
6          node {
7            Id
8            Name {
9              value
10            }
11            Account {
12              Name {
13                value
14              }
15            }
16          }
17        }
18      }
19    }
20  }
21}

応答は、次のようになります。

1{
2  "data": {
3    "uiapi": {
4      "query": {
5        "Opportunity": {
6          "edges": [
7            {
8              "node": {
9                "Name": {
10                  "value": "Edge SLA"
11                },
12                "Account": {
13                  "Name": {
14                    "value": "Edge Communications"
15                  }
16                }
17              }
18            },
19            {
20              "node": {
21                "Name": {
22                  "value": "Edge Emergency Generator"
23                },
24                "Account": {
25                  "Name": {
26                    "value": "Edge Communications"
27                  }
28                }
29              }
30            },
31            {
32              "node": {
33                "Name": {
34                  "value": "Edge Emergency Generator"
35                },
36                "Account": {
37                  "Name": {
38                    "value": "Edge Communications"
39                  }
40                }
41              }
42            },
43            {
44              "node": {
45                "Name": {
46                  "value": "Edge Installation"
47                },
48                "Account": {
49                  "Name": {
50                    "value": "Edge Communications"
51                  }
52                }
53              }
54            },
55            {
56              "node": {
57                "Name": {
58                  "value": "Burlington Textiles Weaving Plant Generator"
59                },
60                "Account": {
61                  "Name": {
62                    "value": "Burlington Textiles Corp of America"
63                  }
64                }
65              }
66            }
67          ]
68        }
69      }
70    }
71  },
72  "errors": []
73}

多態的なリレーション 

リレーションの項目の中には、Account.OwnerId のように、多態的な項目があります。多態的なリレーションを含むクエリを作成するには、GraphQL ワイヤアダプタの query パラメータを使用し、polymorphicParentRelationship 項目を使用してオブジェクトにアノテーションを付加します。

この例では、OwnerId の多態的な項目が User オブジェクトに対応付けられています。

1query AccountCasesDetail {
2  uiapi {
3      query {
4          Account(where: { Name: { like: "Acme%" } }) {
5              edges {
6                  node {
7                      Id
8                      Name {
9                          value
10                          displayValue
11                      }
12                      Cases(
13                          where: { IsClosed: { ne: true } }
14                          orderBy: { LastModifiedDate: { order: ASC } }
15                      ) {
16                          edges {
17                              node {
18                                  Id
19                                  Subject {
20                                      value
21                                      displayValue
22                                  }
23                                  Owner  {
24                                      ... on User {
25                                          Name {
26                                              value
27                                          }
28                                      }
29                                  }
30                                  CreatedDate {
31                                      displayValue
32                                  }
33                                  Id
34                                  IsEscalated {
35                                      value
36                                  }
37                              }
38                          }
39                      }
40                  }
41              }
42          }
43      }
44  }
45}

応答は、次のようになります。

1{
2  "data": {
3    "uiapi": {
4      "query": {
5        "Account": {
6          "edges": [
7            {
8              "node": {
9                "Name": {
10                  "value": "Acme Corp.",
11                  "displayValue": null
12                },
13                "Cases": {
14                  "edges": [
15                    {
16                      "node": {
17                        "Subject": {
18                          "value": "Starting generator after electrical failure"
19                        },
20                        "Owner": {
21                          "Name": {
22                            "value": "Amy Taylor"
23                          }
24                        },
25                        "CreatedDate": {
26                          "displayValue": "10/28/2022, 3:44 PM"
27                        },
28                        "IsEscalated": {
29                          "value": false
30                        }
31                      }
32                    },
33                    {
34                      "node": {
35                        "Subject": {
36                          "value": "Cannot start generator after electrical failure"
37                        },
38                        "Owner": {
39                          "Name": {
40                            "value": "John Kingsley"
41                          }
42                        },
43                        "CreatedDate": {
44                          "displayValue": "10/28/2022, 3:44 PM"
45                        },
46                        "IsEscalated": {
47                          "value": false
48                        }
49                      }
50                    },
51                  ]
52                }
53              }
54            }
55          ]
56        }
57      }
58    }
59  },
60  "errors": []
61}

詳細は、「Lightning Web コンポーネントでの GraphQL API の使用」を参照してください。

Tip

関連トピック

The Japanese Summer '24 guide is now live

日本語の Summer '24 ガイドが公開されました! 「Component Reference (コンポーネントリファレンス)」は、以前と同様にコンポーネントライブラリにあります。