テーブルとオブジェクトの間にアダプターをかませる
Zend Framework でO/Rマッパーを使っていると、テーブルのカラム名とオブジェクトのプロパティ名を1対1にしたくことが多々あります(テーブルの構造だけ案件ごとに差し替えとか)。エンティティに1枚皮をかぶせられないかなぁ・・・と思って、Zend Framework のソースを読んでいたら、_rowClass を書き換えると簡単に実現できることがわかりました。痒いところに手が届く感じで、Zend Framework がまたちょっと好きになりました。
ちなみに _rowsetClass を書き換えると行クラスも差し替えられます。あまり使う機会はなさそうですが。
Dao/Users.php
テーブルクラスです。
<?php class Dao_Users extends Zend_Db_Table_Abstract { protected $_name = 'users'; protected $_primary = 'id'; protected $_rowClass = 'Dao_Row_Users'; }
Dao/Row/Users.php
データクラスです。
<?php class Dao_Row_Users extends Zend_Db_Table_Row { public function primary() { return $this->id; } public function fullname() { return $this->name1 . ' ' . $this->name2; } public function toArray() { return array( 'primary' => $this->primary(), 'fullname' => $this->fullname() ); } }
使用例
$table = new Dao_Users(); $model = $table->find(12345)->current(); print_r($model->toArray());