だから私は、テーブルをクエリしてuserId
から、最初のクエリから取得した配列から別のテーブルをクエリしようとしています。
DB は次のようになります (ユーザーは多くのメンバーを持つことができます)。
members:
id | userId | channelId | name | ...
channels:
id | ...
しかし、問題は、最初のクエリがループオーバーする必要がある配列を返すことです。フックを使用して React でこれを実装するにはどうすればよいですか?
const useChats = () => {
const [chats, setChats] = useState()
const client = useClient()
const memberFilter = useFilter<DB.Member>((query) =>
// hard coded for now
query.eq('userId', '94a9aa95-c794-404a-9a37-7f424b215ebb').limit(10)
)
const [{ data: memberData }] = useRealtime<DB.Member>('members', {
select: {
columns: 'id, channelId, name, image, read',
filter: memberFilter,
},
})
const channelFilter = useFilter<DB.Channel>((query) =>
// issue is here... how do i query `channel:id` for each member entry?
// memberData is of type `DB.Member[] | null | undefined`
query.eq('id', memberData[0].channelId).limit(10)
)
const [{ data: channelData }] = useRealtime<DB.Channel>('channels', {
select: {
columns: 'id, lastActive, lastMessage',
filter: channelFilter,
},
})
return chats
}
export { useChats }
種類:
export namespace DB {
interface Member {
id: string
userId: string
channelId: string
name: string
image: string
read: boolean
}
interface Channel {
id: string
lastActive: string
lastMessage?: string
}
}
react-supabase
クエリに使用する