スポンサーリンク
技術情報

NCMB PHP-SDK【ソートできない!】解決方法教えます!

NCMB PHP-SDK【ソートできない!】解決方法教えます!

ソートメソッドを探す

前回データストアからデータ取得をする事ができました。

NCMB PHP-SDK【PHP7.2で使えない!?】修正方法教えます! PHP-SDKを探してみる PHPでNifty Cloud Mobile Backend(以下Ncmb)を使ってみます。 調べて...

今回は取得時にソートをする方法について調べてみました。

javascript SDKのサンプル

NCMBのjavascriptのサンプルでは下記のように設定する事でソートが可能です。

saveData.order("createDate",true)
  .fetchAll()
  .then(function(results){
//全件検索に成功した場合の処理
  console.log("全件検索に成功しました:"+results.length+"件");
//テーブルにデータをセット
  setData(results);
})

SQLでもおなじみのOrderメソッドが提供されて、ソート対象となるフィールド列名を指定することでソートが可能です。

PHP-SDKのQuery・NcmbObject(前回修正)クラスを探しますが、メソッドや外部プロパティは見つかりません

SDKソースを解析する

NCMBのドキュメントサイト
NCMBのSDKソース
SDKの解析でfindメソッドでREST API文字列を生成し、文字列を構成しているgetOptionsメソッドまでたどり着きました。

プロパティアクセス用外部メソッドを実装する

getOptionsプロパティを確認すると下記のようになっています。

public function getOptions()
{
<中略>
  if ($this->limit >= 0) {
    $opts['limit'] = $this->limit;
  }
<中略>
  if ($this->orderBy) {
    $opts['order'] = implode(',', $this->orderBy);
  }
<中略>
  return $opts; 
}

内部変数のOrderBy配列に文字列を格納して、Queryクラスにメソッドを追加します。

public function orderBy($n)
{
  $this->orderBy[] = $n;
  return$this;
}

■イメージ図(品番ソートを実施)
NCMB PHP-SDKに実装後のソート完了イメージ
表示させたい順番に表示できました。

図で『AC_062』は削除と追加の影響で、最終レコードになっていました。

まとめ

NCMBはクライアント系言語から使いやすい分、サーバサイドからは使いにくい部分があります。

メリット・デメリットを考慮して、使い方は割り切る必要があります。

今後もSDKの使用方法など情報発信していきたいと思います。