はじめに
以下のゴールを達成するため、本日は Hasuraの リレーションシップを学んでいきます。
今回はHasuraを使って1対1のリレーションを作る方法を見ていきます。
最終的なゴール
以下のような構成のアプリを作ることです。
目的
- 仕事で使っている技術のキャッチアップと復習
- 使う可能性がある技術の理解度向上
Hasuraのリレーションシップ(1対1)
今回説明するHasuraのリレーションシップ(多対多)の概念図です。
Hasuraを使って、どうやって多対多のリレーションを実現するかですが、中間テーブルを使って実現しています。
中間テーブルテーブルを使って、users
テーブルとprofiles
テーブルそれぞれのid
を関連づけてマッピングをしていきます。
これを実際に、テーブルや関連づけやデータを追加することで実現していきます。
中間テーブルの作成とデータの追加
👇それぞれAddします。
Nameもデフォのもので。
これで
-
profile_users.profile_id
はprofiles.id
と多対1 -
profile_users.user_id
はusers.id
と多対1
で、関連づけられました。
づぎに、profiles
とusers
を見ていきましょう。
👇提案されていますね。1対多で。
Nameもデフォのものでsaveします。。
これで、関連付け完了です。
続いて、データを追加します。
profile_users
テーブルをこんな感じの関連付けにしましょう。
id | profile_id | user_id |
---|---|---|
1 | bob | john |
2 | bob | lilly |
3 | john | bob |
4 | john | lilly |
いつものように、profile_users
テーブルに対して「Insert Rows」で2つ作成して、「Browse Rows」で確認します。
テーブル同士の関連づけ
profiles
テーブルとusers
テーブルを1対多の関係で関連づけます。
users
テーブルに行って、Modifyを選んで、新しいカラムを作成します。
クエリで確認しましょう
profile_users
から見る
users
から見る
- lillyはbobbyやJonから参照されています
- johnはbobbyから参照されています
- bobはJonから参照されています
ということがわかります。
どうやって探索しているかというと、lillyの場合
lillyのuser.id(5f172cd2-221c-4ea5-8b83-6420b18860ab
)に、profile_users
テーブルをみて紐づいた profile_id
を見ると、bobbyとJonが引っかかる。という感じですね。
本日は以上です。
これで、Hasuraの基本事項は学んだので、次で、Next.jsとapolloクライアントを使って、Hasuraとの連携を学びます。
参考
アウトプット100本ノック実施中