Hasuraのリレーションシップ（1対多）

## はじめに

以下のゴールを達成するため、本日は Hasuraの リレーションシップを学んでいきます。

## 最終的なゴール

以下のような構成のアプリを作ることです。

![スクリーンショット 2021-10-18 17.27.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14191/e8a9a2e1-2723-4fec-77ef-be3b9eefdd81.png)

### 目的

- 仕事で使っている技術のキャッチアップと復習
- 使う可能性がある技術の理解度向上

## Hasuraのリレーションシップ（1対多）

今回説明するHasuraのリレーションシップ（1対多）の概念図です。

![スクリーンショット 2021-10-19 2.08.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14191/dde60e60-5faa-1a60-0930-b26f641a9418.png)

これを実際に、テーブルや関連づけやデータを追加することで実現していきます。

### テーブルの作成とデータの追加

`users`テーブル以外に、`groups`テーブルを作成します。

![スクリーンショット 2021-10-19 1.00.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14191/37032cf7-7dd9-b7f1-ae91-e6f3dda51e5f.png)

Add table

![スクリーンショット 2021-10-19 1.22.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14191/0c2a9328-4c5e-f8e1-b7ca-ca9aa14ad971.png)

### テーブル同士の関連づけ

`groups`テーブルと`users`テーブルを1対多の関係で関連づけます。

`users`テーブルに行って、Modifyを選んで、新しいカラムを作成します。

![Modify_-_users_-_Data___Hasura.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14191/8cfa6b61-6efa-b1ce-28c8-f6951b97f99a.png)

![Modify_-_users_-_Data___Hasura.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14191/3f14fb71-8e8d-0482-1880-4b48ed577e81.png)

#### Foreign Keyの設定

`users`テーブルに行って、ModifyにあるForeign Keyの設定をします。

![Modify_-_users_-_Data___Hasura.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14191/eb97fc6c-a1a1-3154-9727-778f161a413d.png)

`users`テーブルのRelationshipsに行くと、

user.group_id から group.id に対してObject Relationshipsのサジェストがされている。

ユーザーは1つのグループにしか属せないとすると、1対1の関係だからでしょう。

![Relationships_-_users_-_Data___Hasura.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14191/353b996f-c559-5c7b-bd9c-6e887396c72e.png)

Addボタンを押すと、その通りの関連付けがなされます。

![Relationships_-_users_-_Data___Hasura.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14191/3689a2b8-fe2c-bbe2-d9e7-cabf0f392429.png)

group.id から user.group_id に対してはどうでしょうか？

グループは、複数のユーザーと関連が持てますよね。

`groups`テーブルのRelationshipsに行くと、Array Relationshipsのサジェストがされていますね。

![Relationships_-_groups_-_Data___Hasura.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14191/39c09177-8377-642d-ff4a-fd0221ca25e9.png)

これで、1対多の関連づけが完了しました。

データを追加していきましょう。

#### データの追加

![Browse_-_users_-_Data___Hasura.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14191/c33d8f2d-229a-1fab-6b51-6c0657cd2362.png)

![Browse_-_users_-_Data___Hasura.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14191/57857b61-80f9-cfb1-ec2a-187999cd3744.png)

### usersテーブルから見ると

新しくカラムが追加されていることがわかりますね。

クエリを実行すると、usersテーブルのgroup_id と groupsのidが1対１の関係であることがわかります。

![API_Explorer___Hasura.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14191/d47ff1ef-fd38-5459-67ff-26a364819c80.png)

Object Relationshipsという名前も納得ですね。

### groupsテーブルから見ると

![API_Explorer___Hasura.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14191/6fd73133-0878-f057-1b16-b3de7a4baa9e.png)

Array Relationshipsという名前も納得ですね。

本日は以上です。

次回以降で、また別のHasuraのリレーションシップ（1対1や多対多を）見ていきます！

## 参考

https://hasura.io/learn/ja/graphql/hasura/relationships/

## アウトプット100本ノック実施中

https://qiita.com/ryosuketter/items/713474dbd009870e4103