【コラム】
前回まで、FileMaker API for PHPでのデータベース接続手順から、レコード登録方法・バリデートの使い方について取りあげてきた。今回はレコードの検索処理について取りあげよう。FX.phpと比較すると機能が豊富な分、押さえるべきクラス/メソッドもおおい。これらを2回にわけて紹介する。
FileMaker API for PHPでは検索のために、おもに4つのクラスが用意されている。
それぞれの概要は次のとおり。
もっとも汎用的な検索クラス。FileMaker::newFindCommand()を使用してオブジェクトを生成する。任意のテーブルから検索条件をもとに、指定したソート順でレコードを表示する。FX.phpのFMFind()に相当。
FileMaker::newFindAllCommand()を使用してオブジェクトを生成する。任意のテーブルから指定したソート順でレコード全件を表示する。FX.phpのFMFindAll()に相当。
FileMaker::newFindAnyCommand()を使用してオブジェクトを生成する。任意のテーブルからランダムに1件、レコードを表示する。FX.phpのFMFindAny()に相当。
複数の検索条件を指定するために使用するクラス。うまく使えば、FX.phpでは実装に難のあった複合検索も簡単に実装できるようになる。API for PHPを使うならばかならず使いこなせるようになっておきたい機能のひとつだ。
FileMaker_Command_FindRequestはさきに挙げた3つのクラスとはやや用途が異なり、使い方にクセがある。このクラスについては、追って次回紹介する。今回は「FileMaker_Command_Find」「FileMaker_Command_FindALL」「FileMaker_Command_FindAny」の3つについて紹介しよう。
今回紹介する3つのクラスは、表示するレコードの範囲が違うだけで書き方や動作はほとんど一緒だ。ここではおもに、FileMaker_Command_Findクラスを使用してコードを記述する。ほか2つのクラスの場合は、FileMaker::newFindCommand()を適宜置きかえてほしい。
まずは検索条件を入力してレコードを検索する場合だ。使用するFileMakerレイアウトは「API for PHPでのDB接続手順、レコード表示まで(1)」で用いた「fmapi_list」だ。
fmapi_find_test.php
<?php
include_once('../FileMaker.php');
$data = new FileMaker('fmapi_test', 'http://localhost:80', 'admin', 'admin');
$findCommand = $data->newFindCommand('fmapi_list');
$findCommand->setRange(0, 10);
$findCommand->addFindCriterion('ft_updateTimeStamp', '9/1/2009...9/10/2009');
$findCommand->addSortRule('ft_updateTimeStamp', 1, FILEMAKER_SORT_DESCEND);
$result = $findCommand->execute();
if (FileMaker::isError($result))
{
// エラー処理..
echo 'FileMaker Error Code: ' . $result->getCode();
echo '<p>'. $result->getMessage() . '</p>';
}
else
{
// 正常処理..
$records = $result->getRecords();
?>
<table border="1">
<tr>
<th>ft_serial</th>
<th>ft_registTimeStamp</th>
<th>ft_updateTimeStamp</th>
</tr>
<?php
foreach ($records as $record)
{
echo '<tr>';
echo '<td>' . $record->getField('ft_serial') . '</td>';
echo '<td>' . $record->getField('ft_registTimeStamp') . '</td>';
echo '<td>' . $record->getField('ft_updateTimeStamp'). '</td>';
echo '</tr>';
}
?>
</table>
<?php
}
?>
それぞれ1つづつの検索条件、ソート条件を指定。レコード先頭から最大取得レコード数10件としている。これをWebブラウザで表示する。
ソースコード中で使用されているメソッドは次のとおり。
/**
* Request only part of the result set.
*
* @param integer $skip The number of records to skip past.
* @param integer $max The maximum number of records to return.
*/
function setRange($skip = 0, $max = null)
検索後に取得するレコードの範囲を指定する。FX.phpでは$skipがFMSkipRecords()、$maxがSetDBData()の第三引数に相当する。
/**
* Add a find criterion.
*
* @param string $fieldname The field being tested.
* @param string $testvalue The value to test against.
*/
function addFindCriterion($fieldname, $testvalue)
フィールドと検索内容を対にして検索条件を指定する。FX.phpのAddDBParam()に相当する。
/**
* Add a sorting rule to the find command.
*
* @param string $fieldname The field to sort by.
* @param integer $precedence 1-9, should we sort by this field first, last, etc.
* @param mixed $order FILEMAKER_SORT_ASCEND, FILEMAKER_SORT_DESCEND, or a custom value list.
*/
function addSortRule($fieldname, $precedence, $order = null)
ソート条件を指定する。FX.phpのAddSortParam()に相当する。AddSortParamとは引数の順番が異なるため注意されたい。
これら取りあげたメソッドはほか2つのクラスでも使用可能だ。このほかにも、有用なメソッドがいくつか用意されている。
ポータルのレコード取得設定がおこなえる「setRelatedSetsFilters」もAPI for PHPのみの機能だ。地味なところだが、かゆいところに手がとどく機能だと言えるだろう。次回は、API for PHPならではの機能「FileMaker_Command_FindRequest」を紹介しよう。
| ファイルメーカー、FileMaker Business Allianceメンバー向け割引購入プログラム [2009/6/4] |
| ファイルメーカー、参加無料イベント「FileMaker Road Show 2009」開催 [2009/6/4] |
| 【インタビュー】ファイルメーカー粟倉社長に聞く、DBアプリ「Bento for iPhone」の国内展開 [2009/6/3] |
| 『ファイルメーカー選手権』でMacBook ProやVAIOを手に入れよう [2009/6/3] |
| 【コラム】Mac Fan ソフトウェアレビュー 第58回 データベース作成ソフト「FileMaker Pro 10」 [2009/5/25] |
| FileMaker、iPhone/iPod touch版「Bento」が登場 - Bento 2.0と同期可能 [2009/5/5] |
| ファイルメーカー、FileMaker用テーマパックを期間限定で無料配布 [2009/4/17] |
| 【インタビュー】FileMaker Pro 10の魅力はいかに? - 米FileMaker社長 ドミニーク P.グピール氏に聞く [2009/2/24] |
| ファイルメーカーの新社長に粟倉豊氏が就任 [2009/2/2] |
| インタフェースを一新した「FileMaker Pro 10」が発売 [2009/1/6] |
| 花粉の運び屋“マルハナバチ”の国勢調査 [18:11 5/24] |
| 「Arid5a」は自己免疫疾患を引き起こすカギ分子の可能性大 - 阪大 [17:39 5/24] |
| 岡山大、中枢神経の「ランビエ絞輪」形成機構の解明に1歩前進 [17:35 5/24] |
| 細胞間接着を担うタンパク質「クローディン」に関する発見 - 阪大など [17:32 5/24] |
| パナソニック、LEDに匹敵する照明用高効率白色有機EL素子を開発 [17:29 5/24] |
|
ジャン=クロード・ヴァン・ダム最大のヒット作『タイムコップ』がリブート化へ [00:09 5/26] エンタメ |
|
ガラパゴス諸島の美しさをストリートビューで - Google Official Blog [23:44 5/25] パソコン |
|
【レビュー】天板がシースルーだと何が便利か - スリムでかっこいい日本HPの複合機「HP ENVY 120」を試す [23:43 5/25] パソコン |
|
【レビュー】タブグループ機能をさらに使いやすくするFirefoxアドオン「Pano」 [22:39 5/25] パソコン |
|
ソフトバンク、「タダデコ」が6月26日にサービス終了 [22:36 5/25] 携帯 |