Webアプリケーションを実装するにあたり、コード中でもっとも登場回数がおおくなると思われるレコード検索についてを紹介しよう。

レコードの検索方法 - FX.php / API での違い

レコードの検索方法について、2ライブラリの関連するメソッドの使い方・相違点をチェックする。なお、FileMaker API for PHPでは検索方法を実現するクラスとして「FileMaker_Command_Find」「FileMaker_Command_FindAll」「FileMaker_Command_FindAny」「FileMaker_Command_FindRequest」の4種類が提供されているが、ここでは一番オーソドックスな「FileMaker_Command_Find」と比較するものとする。

  FX.php API 備考
検索に使用するレイアウトの指定 SetDBData()の第2引数 newFindCommand('レイアウト名')  
検索条件設定 AddDBParam('フィールド名', '検索したい値', ['AND/OR指定']) addFindCriterion('フィールド名', '検索したい値')  
検索条件設定(配列) AddDBParamArray('フィールド名/検索したい値をセットにした配列', ['フィールドごとのAND/OR指定配列'])   FX.phpのみ
検索条件削除   clearFindCriteria() APIのみ
ソート順指定 AddSortParam('フィールド名', ['昇順・降順の指定'], ['優先順']) addSortRule('フィールド名', ['昇順・降順の指定'], ['優先順']) 昇降順の指定はそれぞれFX.phpが「ascend」「descend」、APIが「FILEMAKER_SORT_ASCEND」「FILEMAKER_SORT_DESCEND」となる。APIの定数はFileMaker.php 61-62行目で確認・変更可
ソート順指定削除   clearSortRules() APIのみ
レコードID指定 SetRecordID('レコードID') setRecordID('レコードID')  
AND/OR検索の指定 SetDefaultOperator('AND/OR指定') setLogicalOperator('AND/OR指定') FX.phpではAddDBParamの第3引数でも指定可
レコード取得上限数の指定 SetDBData()の第3引数 setRange()の第2引数  
結果レコードの先頭から除外する件数の指定 FMSkipRecords('件数') setRange()の第1引数  
レスポンスレイアウトの指定 SetDBData()の第4引数 setResultLayout()  
ポータルフィルタリングの指定 AddDBParam('-relatedsets.filter', 'フィルタ設定'), AddDBParam('-relatedsets.max', 'フィルタ件数') setRelatedSetsFilters('フィルタ設定', 'フィルタ件数') FX.phpでは専用のメソッドがないので、AddDBParamで代用。フィルタ設定には「layout」「none」の、フィルタ件数には整数値または「all」のいずれかを指定
リクエスト発行 FMFind(), DoFXAction('find') execute()  
返り値のタイプ 配列 object FileMaker_Result, object FileMaker_Error APIでは各種結果を取り出すのに各メソッドを使う必要あり

FX.phpでレコードを検索、結果を取得するまでの手順

  1. new FXでインスタンスを作成、接続先を指定
  2. SetDBDataで使用するDB、レイアウト、一度に取得するレコード件数、レスポンスレイアウトを指定
  3. AddDBParamまたはAddParamArrayで検索したい内容を指定
  4. AddSortParamでソート順を指定
  5. FMSkipRecordsで先頭から除外するレコード件数を指定
  6. レイアウトにポータルが配置されている場合は、AddDBParam('-relatedsets.filter')/AddDBParam('-relatedsets.max')でフィルタリングの設定をおこなう
  7. FMFindまたはDoFXAction('find')でリクエスト発行
  8. 結果を配列で取得
  9. $resultSet['errorCode']の値でエラー判定
  10. $resultSet['data']からフィールド内容を取得

APIでレコードを検索、結果を取得するまでの手順

  1. new FileMakerでFileMakerのインスタンスを作成、接続先を指定
  2. newFindCommandでFileMaker_Command_Findオブジェクトを作成。このときレイアウトを指定
  3. addFindCriterionで検索したい内容を指定
  4. addSortRuleでソート順を指定
  5. setRangeで先頭から除外するレコード件数・一度に取得するレコード件数を指定
  6. レイアウトにポータルが配置されている場合は、setRelatedSetsFiltersでフィルタリングの設定をおこなう
  7. setResultLayoutでレスポンスレイアウトを指定
  8. executeでリクエスト発行
  9. 成功した場合はFileMaker_Resultオブジェクトが、失敗した場合はFileMaker_Errorオブジェクトが返る
  10. FileMaker::isErrorでエラー判定
  11. getFirstRecordやgetRecordsでFileMaker_Recordオブジェクトを取得
  12. getFieldやgetFieldUnencodedでフィールド内容を取得

FileMaker API for PHPにはあるがFX.phpにはメソッドが用意されていない場合でも、ポータルフィルタリングのようなFileMakerサーバに投げられるクエリがわかっている場合はAddDBParamで代用が可能だ。

次回はこの対応表と手順を使用して、簡単な画面遷移をする一覧画面を実際に作成してみよう。