🔗

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