9.6. Zend_Db_Table_Rowset
前のページ | 第9章 Zend_Db | 次のページ

## 9.6. Zend_Db_Table_Rowset

### 9.6.1. 導入

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 の集合を順にたどり、必要ならば変更していくことが可能です。

### 9.6.2. 行セットの取得

最初に 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 オブジェクトで表したものの集合です
    //
    ?>

### 9.6.3. 行セットの順次処理

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();
    }
    ?>

前のページ | 上に戻る | 次のページ
9.5. Zend_Db_Table_Row | ホーム | 第10章 Zend_Feed