🔗
Supabaseで多対多リレーションを取得する
Supabaseで多対多(many-to-many)のリレーションを持つテーブルからデータを取得する方法を紹介します。
テーブル構成
投稿記事テーブル(posts)、タグテーブル(tags)、中間テーブル(posts_tags)で構成されています。
データ取得方法
方法1: 中間テーブルを明示
中間テーブル(posts_tags)を明示的に指定して取得できます。
const { data, error } = await supabase
.from("posts")
.select(`
*,
posts_tags (
tags (*)
)
`)
デメリット: プロパティの扱いが煩雑になります。
方法2: 直接テーブル名を指定(推奨)
Supabaseが自動的に中間テーブルを経由してくれるため、直接tagsを指定できます。
const { data, error } = await supabase
.from("posts")
.select(`
*,
tags(*)
`)
メリット: シンプルで扱いやすいデータ構造にな���ます。
注意点
重要: 中間テーブルとのリレーション(外部キー制約)を必ず設定してください。設定がないと正しく取得できません。
まとめ
Supabaseでは多対多のリレーションを簡潔に取得できます。中間テーブルを明示せず、直接テーブル名を指定する方法がシンプルでおすすめです。
Discussion