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でレコードを検索、結果を取得するまでの手順
- new FXでインスタンスを作成、接続先を指定
- SetDBDataで使用するDB、レイアウト、一度に取得するレコード件数、レスポンスレイアウトを指定
- AddDBParamまたはAddParamArrayで検索したい内容を指定
- AddSortParamでソート順を指定
- FMSkipRecordsで先頭から除外するレコード件数を指定
- レイアウトにポータルが配置されている場合は、AddDBParam('-relatedsets.filter')/AddDBParam('-relatedsets.max')でフィルタリングの設定をおこなう
- FMFindまたはDoFXAction('find')でリクエスト発行
- 結果を配列で取得
- $resultSet['errorCode']の値でエラー判定
- $resultSet['data']からフィールド内容を取得
APIでレコードを検索、結果を取得するまでの手順
- new FileMakerでFileMakerのインスタンスを作成、接続先を指定
- newFindCommandでFileMaker_Command_Findオブジェクトを作成。このときレイアウトを指定
- addFindCriterionで検索したい内容を指定
- addSortRuleでソート順を指定
- setRangeで先頭から除外するレコード件数・一度に取得するレコード件数を指定
- レイアウトにポータルが配置されている場合は、setRelatedSetsFiltersでフィルタリングの設定をおこなう
- setResultLayoutでレスポンスレイアウトを指定
- executeでリクエスト発行
- 成功した場合はFileMaker_Resultオブジェクトが、失敗した場合はFileMaker_Errorオブジェクトが返る
- FileMaker::isErrorでエラー判定
- getFirstRecordやgetRecordsでFileMaker_Recordオブジェクトを取得
- getFieldやgetFieldUnencodedでフィールド内容を取得
FileMaker API for PHPにはあるがFX.phpにはメソッドが用意されていない場合でも、ポータルフィルタリングのようなFileMakerサーバに投げられるクエリがわかっている場合はAddDBParamで代用が可能だ。
次回はこの対応表と手順を使用して、簡単な画面遷移をする一覧画面を実際に作成してみよう。