Zend_Db_Table_Row は、Zend Framework の行データゲートウェイです。 一般に、Zend_Db_Table_Row のインスタンスを直接生成することはありません。 その代わりに、Zend_Db_Table::find() や Zend_Db_Table::fetchRow() の返す結果として Zend_Db_Table_Row を取得します。 取得した Zend_Db_Table_Row を用いてレコードの値を編集し (クラスのプロパティとして表されます)、 save() を使用して変更内容をもとのテーブルに反映させます。
最初に 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::fetchRow() を使用して、データベースから 1 行のレコードを取得します。 返される結果は Zend_Db_Table_Row オブジェクトであり、 "underscore_words" 形式のカラム名を "camelCaps" 形式に変換したものが、そのオブジェクトのプロパティとなります。 例えば、テーブルのカラム "first_name" の内容が、 オブジェクトのプロパティ "firstName" に対応します。
<?php // テーブルから、レコードを Zend_Db_Table_Row オブジェクトとして取得します $row = $table->fetchRow('first_name = "Robin"'); // // $row は Zend_Db_Table_Row オブジェクトで、 // テーブルのカラムに対応する public プロパティを持っています // // $row->id = '3' // $row->nobleTitle = 'Sir' // $row->firstName = 'Robin' // $row->favoriteColor = 'yellow' // ?>
行の値を変更するのは簡単です。単にオブジェクトのプロパティを変更すればよいのです。 変更した後に、save() を使用してその内容をテーブルに書き戻します。
<?php // データベースのテーブルに接続します class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); // テーブルから、レコードを Zend_Db_Table_Row オブジェクトとして取得します $row = $table->fetchRow('first_name = "Robin"'); // // $row は Zend_Db_Table_Row オブジェクトで、 // テーブルのカラムに対応する public プロパティを持っています // // $row->id = '3' // $row->nobleTitle = 'Sir' // $row->firstName = 'Robin' // $row->favoriteColor = 'yellow' // // 「好きな色」を変更してテーブルに書き戻します $row->favoriteColor = 'blue';' $row->save(); ?>
しかし、主キーの値を変更することはできません。変更しようとすると Zend_Db_Table_Row は例外をスローします。
<?php // データベースのテーブルに接続します class RoundTable extends Zend_Db_Table {} $table = new RoundTable(); // テーブルから、レコードを Zend_Db_Table_Row オブジェクトとして取得します $row = $table->fetchRow('first_name = "Robin"'); // 主キーである "id" を変更できますか? try { $row->id = 5; echo "We should not see this message, as an exception was thrown."; } catch (Zend_Db_Table_RowException $e) { echo $e->getMessage(); } ?>