前回よりFileMakerデータ結果セットの取扱いに特化したクラス「FileMaker_ResultSet」について紹介している。今回は前回の続きから、残り6メソッドについて紹介しよう。
取得できる情報 | メソッド名 | 返り値の型 |
---|---|---|
フィールド名 | getFields() | array |
結果セット内の最初のレコード情報 | getFirstRecord() | object FileMaker_Record |
結果セット内の最後のレコード情報 | getLastRecord() | object FileMaker_Record |
レイアウト情報 | getLayout() | object FileMaker_Layout |
レコード情報 | getRecords() | array FileMaker_Record |
リレーションで使用されているテーブルオカレンス名 | getRelatedSets() | array |
フィールド・レイアウト・テーブルオカレンス名の取得について
- getFields(), getLayout(), getRelatedSets()
それぞれに対応する名称や情報を格納した配列・オブジェクトが返る。引数はない。
getFieldsメソッド (FileMaker/Result.php 71-82行目より)
/**
* Return a list of the names of all fields in the records that
* are part of this response. Just the names are returned; if
* additional information is required then Layout object provided
* by getLayout() must be consulted.
*
* @return array String field names.
*/
function getFields()
{
return $this->_impl->getFields();
}
レイアウトに配置されているフィールドの名称が文字列型の配列で返る。いままでに紹介してきたFileMaker_LayoutクラスやFileMaker_RelatedSetクラスのlistFields()の動作に相当する。なお、このメソッドはポータル内に配置しているフィールドが含まれないので注意されたい。
getLayoutメソッド (FileMaker/Result.php 46-55行目より)
/**
* Get the FileMaker_Layout object describing the layout of this
* response.
*
* @return FileMaker_Layout The layout description.
*/
function &getLayout()
{
return $this->_impl->getLayout();
}
指定したレスポンスレイアウトについての情報がFileMaker_Layoutオブジェクトとして返る。FileMaker_Layoutクラスの各機能を使って詳細情報を拾っていくことになる。レスポンスレイアウトについては「スピードアップのために徹底チューニング(1) フィールドの配置法」も参照されたい。
getRelatedSetsメソッド (FileMaker/Result.php 84-92行目より)
/**
* Return the names of all related sets present in this record.
*
* @return array String related set names.
*/
function getRelatedSets()
{
return $this->_impl->getRelatedSets();
}
指定したレイアウトに配置されている全ポータルのテーブルオカレンス名が文字列型の配列で返る。FileMaker_Layoutクラスに同名のメソッドがあるが、機能的にはlistRelatedSets()に相当する。
まずはこの3つのメソッドがどのような動作をするか確認してみよう。FileMakerレイアウトはgetRelatedSetを指定する。
fmapi_result_2.php
<?php
include_once('../FileMaker.php');
$data = new FileMaker('fmapi_test', 'http://localhost:80', 'admin', 'admin');
// 検索条件を作成
$findCommand = $data->newFindAnyCommand('getRelatedSet');
$result = $findCommand->execute();
// FileMaker_RelatedSetオブジェクトエラー判定
if (FileMaker::isError($result))
{
// エラー処理..
echo 'FileMaker Error Code: ' . $result->getCode();
echo '<p>'. $result->getMessage() . '</p>';
}
else
{
// 正常処理
?>
<table border="1">
<tr>
<th>getFields()</th>
<th>getLayout()</th>
<th>getRelatedSets()</th>
</tr>
<tr>
<td valign="top"><pre><?php var_dump($result->getFields()); ?></pre></td>
<td valign="top"><pre><?php var_dump($result->getLayout()); ?></pre></td>
<td valign="top"><pre><?php var_dump($result->getRelatedSets()); ?></pre></td>
</tr>
</table>
<?php
}
?>
newFindAnyCommand()でランダムに1件レコードを取得し、FileMaker_RelatedSetオブジェクトを取得。getFields(), getLayout(), getRelatedSets()の動作をそれぞれ確認している。これをWebブラウザで表示してみよう。
getFields()ではポータルに配置しているフィールドの名称まで拾えない。getLayout()からFileMaker_Layoutオブジェクトを取得し、そこから取得することになる。
レコード情報の取得について
- getRecords(), getFirstRecord(), getLastRecord()
getRecordsメソッド (FileMaker/Result.php 57-69行目より)
/**
* Returns an array containing each record in the result set. Each
* member of the array is a FileMaker_Record object, or an
* instance of the class name set in the API for instantiating
* Records. The array may be empty if the response contains no
* records.
*
* @return array The record objects.
*/
function &getRecords()
{
return $this->_impl->getRecords();
}
指定した検索条件に該当・取得したレコード情報がFileMaker_Recordオブジェクトの配列として返る。FileMaker_Recordクラスの使い方は次回以降紹介していこう。
getFirstRecordメソッド (FileMaker/Result.php 127-135行目より)
/**
* Returns the first record in this result set.
*
* @return FileMaker_Record object The first record in the result set.
*/
function getFirstRecord()
{
return $this->_impl->getFirstRecord();
}
getLastRecordメソッド (FileMaker/Result.php 137-145行目より)
/**
* Returns the last record in this result set.
*
* @return FileMaker_Record object The last record in the result set.
*/
function getLastRecord()
{
return $this->_impl->getLastRecord();
}
指定した検索条件に該当・取得したレコード情報のうち、それぞれ最初・最後の1レコードをFileMaker_Recordオブジェクトとして返す。一覧画面のページャなどに利用すると良いだろう。
結果を比較するサンプルコードを用意した。
fmapi_result_3.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);
$getRange = $findCommand->getRange();
$findCommand->addFindCriterion('ft_registTimeStamp', '10/*/2009 *:*:*');
$result = $findCommand->execute();
// FileMaker_RelatedSetオブジェクトエラー判定
if (FileMaker::isError($result))
{
// エラー処理..
echo 'FileMaker Error Code: ' . $result->getCode();
echo '<p>'. $result->getMessage() . '</p>';
}
else
{
// 正常処理
?>
<table border="1">
<tr>
<th> </th>
<?php
foreach( $result->getFields() as $fieldName )
{
?>
<th><?php echo $fieldName; ?></th>
<?php
}
unset($fieldName);
?>
</tr>
<tr>
<th rowspan="<?php echo $getRange['max']; ?>">getRecords()</th>
<?php
foreach( $result->getRecords() as $recordValue )
{
echo ( 0 < $recordKey ) ? '<tr>' : '';
foreach( $result->getFields() as $fieldName )
{
?>
<td><?php echo $recordValue->getField($fieldName); ?></td>
<?php
}
unset($fieldName);
echo '</tr>';
}
unset($recordValue);
?>
</tr>
<tr>
<th>getFirstRecord()</th>
<?php
foreach( $result->getFirstRecord() as $recordValue )
{
foreach( $result->getFields() as $fieldName )
{
?>
<td><?php echo $recordValue->getField($fieldName); ?></td>
<?php
}
unset($fieldName);
}
unset($recordValue);
?>
</tr>
<tr>
<th>getLastRecord()</th>
<?php
foreach( $result->getLastRecord() as $recordValue )
{
foreach( $result->getFields() as $fieldName )
{
?>
<td><?php echo $recordValue->getField($fieldName); ?></td>
<?php
}
unset($fieldName);
}
unset($recordValue);
?>
</tr>
</table>
<?php
}
?>
各メソッドでFileMaker_Recordオブジェクトを取得。前半で紹介したgetFields()でレイアウトに配置されているフィールドを取得し、レコードをそれぞれ展開している。これをWebブラウザで表示してみよう。
getRecords()では検索に該当した対象レコード分のFileMaker_Recordオブジェクトが配列で。getFirstRecord(), getLastRecord()ではそれぞれ先頭・最後の1レコードだけのオブジェクトが返る |
setRangeのmax値を調節し、1件だけ取得した場合の結果。1件だけでもこれらのメソッドは動作する |
上記のようにgetRecords()とgetFields()を組み合わせることで、レイアウトに配置したフィールドだけを表示する一覧画面も簡単に作成できる。ぜひ覚えておこう。