リレーションシップ

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

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

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

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

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

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

query {
workspace {
id
name
owner {
id
name
}
}
}

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

配列リレーションシップ

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

query {
users {
id
name
messages {
id
message
channel_id
}
}
}

このクエリでは、ユーザーを取得できます。そして、ユーザーごとに、そのユーザーが送信したメッセージ(複数)を取得します。ユーザーは複数のメッセージを持つことができるため、これは配列リレーションシップです。

リレーションシップは、外部キー制約によってキャプチャできます。外部キー制約により、ぶら下がったデータがなくなります。 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