Zend_Db_Table_Rowのカスタマイズ

| コメント(0) | トラックバック(0)

こんにちは、バズー株式会社、開発チームリーダーの清水です。

バズーでは、アプリケーションプラットフォームとして、PHP の Zend Framework を全面的に採用しています。

Zend_Db_Table を使っていて、データベースのテーブルに存在しないカラムを仮想的に作るための方法です。

(1)Zend_Db_Table を使って検索したモデルは Zend_Db_Table_Row を継承しています。このクラスを継承した子クラスを作り、親テーブルがそれを参照するようにします。

class Dao_Test extends Zend_Db_Table_Abstract {
  protected $_name   = 'dtb_test';
  protected $_primary = 'id';
  protected $_rowClass = 'Dao_Row_Test';
}

「dtb_test」はテーブル名、「id」は主キー名、「_rowClass」は今回使用する Zend_Db_Table_Row を継承したクラスです。

(2)つづいて Zend_Db_Table_Row を継承したクラスを作ります。

class Dao_Row_Test extends Zend_Db_Table_Row {
  /**
   * @override
   */
  public function __get($columnName) {
    if ($columnName == 'some_where_col1') {
      return 'something';
    } elseif ($columnName == 'some_where_col2') {
      return '[' . $this->id * 100 ']';
    } else {
      return parent::__get($columnName);
    }
  }
}

仮想カラム「some_where_col1」と「some_where_col2」を作ってみました。「$this->カラム名」で他のカラムの値が取得できます。テーブルを正規化していくと、一覧ページのテンプレートが致命的に汚くなるか、コントローラが太るので、モデルにこうやって書くと非常に綺麗にかけます。

トラックバック(0)

トラックバックURL: http://tech.buzoo.jp/mt4/mt-tb.cgi/195

コメントする

就活アワード2012 受賞

本格SF宇宙戦争シュミレーションゲーム 宇宙神話モバイルプラネット

格闘系美少女学園RPG 闘女伝説モバイル学園

携帯サイト作成のバズー株式会社

名経営者を志す 熱血社長ブログ

感動を与える仕事をする!COOのブログ

攻めのド営業 営業本部長ブログ

事業家を目指す新卒者ブログ

mixiアプリ企画・開発

バズービル写真

セレブスタイル

芝大門スタジオ

キッズスタイル

プライバシーマーク

フィードメーター - 携帯サイト開発を極める!開発チームリーダーのブロ..

あわせて読みたいブログパーツ

カテゴリ

プロフィール

バズー株式会社
執行役員 CTO
海外事業部責任者
清水 樹 (Jun Shimizu)
慶應義塾大学理工学部卒業
日立ソフトウェアエンジニアリング出身
インドネシアのジャカルタでオフショア開発拠点設置中。