Zend_Db_Table_Rowset は、Zend_Db_Table_Row オブジェクトの集合に対するイテレータです。 一般に Zend_Db_Table_Rowset のインスタンスを直接生成することはありません。 その代わりに、Zend_Db_Table::find() や fetchAll() の返す結果として Zend_Db_Table_Rowset を取得します。Zend_Db_Table_Row の集合を順にたどり、必要ならば変更していくことが可能です。
最初に Zend_Db_Table クラスのインスタンスを作成します。
<?php
// アダプタを設定します
require_once 'Zend/Db.php';
$params = array (
'host' => '127.0.0.1',
'username' => 'malory',
'password' => '******',
'dbname' => 'camelot'
);
$db = Zend_Db::factory('PDO_MYSQL', $params);
// すべての Zend_Db_Table オブジェクトに対するデフォルトアダプタを設定します
require_once 'Zend/Db/Table.php';
Zend_Db_Table::setDefaultAdapter($db);
// データベースのテーブルに接続します
class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();
?>
次に、Zend_Db_Table::find() に複数のキーを指定するか Zend_Db_Table::fetchAll() を使用して、データベースから複数のレコードを取得します。 返される結果は Zend_Db_Table_Rowset オブジェクトであり、 レコードセット内の個々の Zend_Db_Table_Row オブジェクトにアクセスすることが可能です。
<?php
// テーブルから複数のレコードを取得します
$rowset = $table->fetchAll();
//
// $rowset は Zend_Db_Table_Rowset オブジェクトで、結果の各レコードを
// Zend_Db_Table_Row オブジェクトで表したものの集合です
//
?>
Zend_Db_Table_Rowset は SPL Iterator インターフェイスを実装しています。 つまり、配列と同様に Zend_Db_Table_Rowset を foreach() で処理できるということです。 foreach() で取得できる値は Zend_Db_Table_Row で、 これがテーブルのひとつのレコードに対応します。 このレコードについて閲覧や変更、そしてプロパティの保存ができます。
<?php
// データベースのテーブルに接続します
class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();
// テーブルから複数のレコードを取得します
$rowset = $table->fetchAll();
// すべて表示します
foreach ($rowset as $row) {
// $row は Zend_Db_Table_Row オブジェクトです
echo "<p>" . htmlspecialchars($row->nobleTitle) . " "
. htmlspecialchars($row->firstName) . "'s "
. "favorite color is " . htmlspecialchars($row->favoriteColor)
. ".</p>\n";
// この行の表示回数を更新します
// (これは、テーブルのカラム "times_displayed" に対応します)
$row->timesDisplayed ++;
// 新しい情報でレコードを更新します
$row->save();
}
?>