Supabase のDBからデータを取得する際、ネストされた子レコードの order を指定する
Supabase のDBからデータを取得する際に、ネストされた子レコードの order を指定する方法でちょっと躓いたのでメモがてら書いておきます。
前提
まず、前提として以下の posts
テーブルと items
テーブルがあると仮定します。ここで、items
テーブルの post_id
カラムは posts
テーブルの id
に関連づけられています。
posts: id: string title: string is_published: boolean created_at: Timestamp updated_at: Timestamp description: string items: id: string(uuid) created_at: Timestamp updated_at: Timestamp post_id: string(uuid) // 外部キー order_number: number body: string
このとき、アプリケーションで posts
を取得する際、それに紐づく items
を含め、さらに items
の順序を order_number
によって並び替えたいとします。
方法
以下のように書きます。
const { data: post, error } = await supabase .from("posts") .select( '*, items(*)' ) .eq('id', id) .order('order_number', { foreignTable: 'items', ascending: true }) // 昇順 でソート .single()
.order('order_number', { foreignTable: 'items', ascending: true })
のように、order
メソッドの第二引数に、外部テーブル名とソート方法を指定してやればよさそうです。