リレーションシップ

リレーションシップによって、データベース内のテーブル/ビューが接続されている場合、ネストされたオブジェクトクエリを作成できます。

GraphQLスキーマリレーションシップは、以下のいずれかになります。

  • オブジェクトリレーションシップ(1対1)
  • 配列リレーションシップ(1対多)

オブジェクトリレーションシップ

そして、 todos とそれを作成した user に関する詳細情報をクエリしたい場合を考えます。これは、二者間にリレーションシップが存在する場合、ネストされたクエリを使って達成できます。これは1対1のクエリであり、オブジェクトリレーションシップと呼ばれます。

このようなネストされたクエリの例は、以下のようになります。

query {
todos {
id
title
user {
id
name
}
}
}

1つのクエリで、todosと関連するユーザー情報を取得できます。任意のレベルにネストできるため、これは非常に有効です。

配列リレーションシップ

配列リレーションシップのクエリの例を見てみましょう。

query {
users {
id
name
todos {
id
title
}
}
}

このクエリで、ユーザーを取得できます。そして、各ユーザーごとに、そのユーザーが書いたtodos(複数)を取得します。ユーザーは複数のtodosを持つことができるため、これは配列リレーションシップになります。

リレーションシップは、外部キー制約によってキャプチャできます。外部キー制約により、ぶら下がったデータがなくなります。 Hasuraコンソールは、これらの制約に基づいて自動的にリレーションシップを提案します。

制約はオプションですが、データの一貫性のためにこれらの制約を適用することをお勧めします。

上記のクエリは、リレーションシップを定義していないため、まだ機能しません。しかし、これによってネストされたクエリがどのように動作するかを理解できます。

Did you find this page helpful?
Start with GraphQL on Hasura for Free
  • ArrowBuild apps and APIs 10x faster
  • ArrowBuilt-in authorization and caching
  • Arrow8x more performant than hand-rolled APIs
Promo
footer illustration
Brand logo
© 2024 Hasura Inc. All rights reserved
Github
Titter
Discord
Facebook
Instagram
Youtube
Linkedin