【问题标题】:How to queries in supabase realtime?如何在 supabase 中实时查询?
【发布时间】:2022-10-21 08:34:31
【问题描述】:
大多数博客和堆栈都建议使用以下数据库进行聊天。
message_table
-id
-message
-conversationId
-sender
-receiverId
conversation_table
-id
-conversationId
现在message_table 看起来像这样。
因此,对于聊天屏幕,我订阅了消息表。
final mySubscription = supabase
.from('message_table')
.on(SupabaseEventTypes.all, (payload) {
// Handle realtime payload
})
.subscribe();
如果 user1 和 user2 正在聊天,他们将从这个表中获取所有消息。
那么,如何在 supbase 中使用指定的 conversationId 过滤这些数据以停止接收其他用户的其他消息并减少带宽?
这个数据库可行吗?
【问题讨论】:
标签:
sql
postgresql
flutter
dart
supabase
【解决方案1】:
您可以像这样在实时侦听器上添加 eq 过滤器:
supbase-flutter v1.X
final subscription = supabase.channel('unique_channel').on(
RealtimeListenTypes.postgresChanges,
ChannelFilter(
event: '*',
schema: 'public',
table: 'message_table',
filter: 'conversationId=eq.conv12',
), (payload, [ref]) {
// handle realtime here
}).subscribe();
supbase-flutter v0.X
final subscription = supabase
.from('message_table:conversationId=eq.conv12')
.on(SupabaseEventTypes.all, (payload) {
// Handle realtime payload
})
.subscribe();
您可以在官方 Supabase 文档here 上阅读有关此功能的更多信息!
【解决方案2】:
查找其列满足过滤器的所有行。
var conversationId = yourvalue ;
final mySubscription = supabase
.from('message_table')
.select('message, conversationId, sender , receiverId')
.eq('conversationId', conversationId) // Correct
.on(SupabaseEventTypes.all, (payload) {
// Handle realtime payload
})
.subscribe();