🐘

Supabaseからのデータ取得

2024/05/28に公開

Tips💡

Supabaseからデータの取得方法。ボタンを押すとログを出すロジックを実装してます。

[全件取得] 
テーブルから全てのデータを取得します。

IconButton(onPressed: () async {
      final supabase = Supabase.instance.client;
      final logs = await supabase.from('t_user').select();
      logger.d('fetch data📈: $logs');
    }, icon: Icon(Icons.construction)),

[指定した件数だけデータを取得]
例えばデータを2件だけ取得したい場合は、liminを使う。

IconButton(onPressed: () async {
              final supabase = Supabase.instance.client;
              final logs = await supabase.from('t_user').select().limit(2);
            }, icon: Icon(Icons.construction)),

[自分のデータだけ取得]
ログインしているユーザーのuuidと自分のデータだけテーブルから取得するクエリ。

IconButton(onPressed: () async {
      final supabase = Supabase.instance.client;
       final userId = supabase.auth.currentUser!.id;
       logger.d('uuid🔑 $userId');
      final logs = await supabase.from('t_user').select().eq('uuid', userId);
      logger.d('fetch data📈: $logs');
    }, icon: Icon(Icons.construction)),

最後に

よく書くクエリの内部実装をみてみた。

[from内部実装]
/// テーブルのリアルタイムデータを Stream として返す。
///
/// リアルタイムは新しいテーブルではデフォルトで無効になっている。レプリケーションの管理](https://supabase.com/docs/guides/realtime/extensions/postgres-changes#replication-setup) によって有効にすることができる。
///
/// プライマリキーのカラム名のリストを [primaryKey] に渡す。プライマリキーは、ライブラリがリアルタイム更新を受信した際に、内部的に適切なレコードを更新・削除するために使用される。
///
/// dart /// supabase.from('chats').stream(primaryKey: ['id']).listen(_onChatsReceived); /// ``` /// /// `eq`、`neq`、`lt`、`lte`、`gt` または `gte` と `order`、`limit`フィルタを使用して、クエリするデータを制限することができる。 /// /// dart
/// supabase.from('chats').stream(primaryKey: ['id']).eq('room_id','123').order('created_at').limit(20).listen(_onChatsReceived);
/// ```


[select内部実装]
/// テーブルまたはビューに対してSELECTクエリを実行する。
///
/// dart /// supabase.from('users').select('id, messages'); /// ``` /// /// dart
/// supabase.from('users').select('id, messages').count(CountOption.exact);
/// ```
/// count] を追加することで、戻り値の型は [PostgrestResponse] になります。それ以外の場合は、ラッパーを使わずに直接データを返します。


[eq内部実装]
/// 指定された[列]の値が、指定された[値]と完全に一致する全ての行を見つける。
///
/// ``dart
/// await supabase
/// .from('users')
/// .select()
/// .eq('username', 'supabot');
/// ```

Discussion