リレーションシップ
リレーションシップによって、データベース内のテーブル/ビューが接続されている場合、ネストされたオブジェクトクエリを作成できます。
GraphQLスキーマリレーションシップは、以下のいずれかになります。
- オブジェクトリレーションシップ(1対1)
- 配列リレーションシップ(1対多)
オブジェクトリレーションシップ
そして、 todos
とそれを作成した user
に関する詳細情報をクエリしたい場合を考えます。これは、二者間にリレーションシップが存在する場合、ネストされたクエリを使って達成できます。これは1対1のクエリであり、オブジェクトリレーションシップと呼ばれます。
このようなネストされたクエリの例は、以下のようになります。
query {todos {idtitleuser {idname}}}
1つのクエリで、todosと関連するユーザー情報を取得できます。任意のレベルにネストできるため、これは非常に有効です。
配列リレーションシップ
配列リレーションシップのクエリの例を見てみましょう。
query {users {idnametodos {idtitle}}}
このクエリで、ユーザーを取得できます。そして、各ユーザーごとに、そのユーザーが書いたtodos(複数)を取得します。ユーザーは複数のtodosを持つことができるため、これは配列リレーションシップになります。
リレーションシップは、外部キー制約によってキャプチャできます。外部キー制約により、ぶら下がったデータがなくなります。 Hasuraコンソールは、これらの制約に基づいて自動的にリレーションシップを提案します。
制約はオプションですが、データの一貫性のためにこれらの制約を適用することをお勧めします。
上記のクエリは、リレーションシップを定義していないため、まだ機能しません。しかし、これによってネストされたクエリがどのように動作するかを理解できます。
- Build apps and APIs 10x faster
- Built-in authorization and caching
- 8x more performant than hand-rolled APIs