LoginSignup
0
0

More than 1 year has passed since last update.

NCMB Flutter SDKがサブクエリに対応しました

Posted at

FlutterはDartで書かれたフレームワークになります。元々iOSやAndroidといったスマートフォン向けでしたが、今ではWebやWindows、macOSといったマルチプラットフォームで動作します。Flutter/Dartを覚えることで、多くの環境に対してアプリケーション開発が可能になります。

NCMBでは公式SDKを提供していませんが、非公式に開発を進めているFlutter SDKがあります。だいたいの機能は実装してきましたが、今回サブクエリに対応しました。より複雑なデータ取得方法に利用できますので、覚えておくと便利な場面があるかも知れません。

ncmb | Dart Package

インストール

flutter pub get ncmb でインストールできます。

使い方

任意のファイル上でライブラリを読み込みます。

import 'package:ncmb/ncmb.dart';

そしてNCMBオブジェクトを初期化します。

NCMB('APPLICATION_KEY', 'CLIENT_KEY');

サブクエリについて

データストアのクラス同士でデータを連係させる場合、二つの方法が用意されています。

  • ポインター
  • リレーション

ポインターは1対n、リレーションはn対nのデータ関係性において利用が可能です。しかし、データ連係を行わずに各クラスにデータを投入してしまっている場合もあるでしょう。そこで使ってみたいのがサブクエリです。

通常の方法

例えば以下のようなデータを考えてみます。

Groupクラス

name
Group 1
Group 2
Group 3

Memberクラス

Group name
Group 1 Test 1
Group 1 Test 2
Group 1 Test 3
Group 2 Test 4
Group 2 Test 5
Group 2 Test 6

リレーションやポインターがない状態ですと、例えば以下のような検索方法が考えられます。

var groupQuery = new NCMBQuery('Group');
groupQuery.equalTo('name', 'Group2');
// データ取得(クエリ実行)
var group = await groupQuery.fetch();
var memberQuery = new NCMBQuery('Member');
memberQuery.equalTo('Group', group.name)
// データ取得(クエリ実行)
var members = await memberQuery.fetchAll();
print(members);

この場合の問題点としては、クエリを2回実行しているということです。そのため、APIの消費量はもちろん、ネットワークの遅延も発生します。

サブクエリの利用

サブクエリを使った場合、次のようなコードになります。データを取得する fetchAll は1回しか実行していません。

var groupQuery = new NCMBQuery('Group');
groupQuery.equalTo('name', 'Group 2');
var memberQuery = new NCMBQuery('Member');
memberQuery.select('group', 'name', groupQuery);
// データ取得(クエリ実行)
var members = await memberQuery.fetchAll();

見て分かる通り、グループについては検索を実行していません。その状態でメンバークラスのselectメソッドを使います。そうすることでグループの検索結果を用いて、その条件にマッチするデータを取り出すことができます。

ポインターやリレーションでも同じような操作はできますが、より柔軟な検索が可能です。

まとめ

mBaaSのようなNoSQL型のデータベースを使いつつもデータをリレーショナルに管理したいという要望は根強くあります。そうした時にはポインターやリレーションを使ったり、さらにサブクエリを使うことで柔軟なデータ抽出が実現できるでしょう。

NCMBのDart/Flutterパッケージはncmb | Dart Packageにて公開しています。ぜひ試してみてください!

ncmb | Dart Package

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0