Contenu connexe
Similaire à Zend Db Table拡張説明資料 (20)
Zend Db Table拡張説明資料
- 2. はじめに 本資料中のサンプルコードは以下のDBテーブルを対象にしたものです。 category job category_id name created_at updated_at job_id category_id company url position location email created_at updated_at また、ZendFrameworkは 1.10.0を利用し、appnamespaseはHoge、ディレクトリ構造は以下のようになっています application/models models/mappers models/DbTable
- 4. Doctrineを調査した結果 ■ 便利だと思ったこと recordクラスをnew して設定するだけで、insertできる(TableクラスからcreateNew()しなくていい。1レコードを扱う際に意識するのはレコードクラスのみ。) $category = new Category(); $category->name = “hogehoge”; $cateopry->save();
- 5. Doctrineを調査した結果 ■ 便利だと思ったこと SQL文から取得した結果を、更新可能なobject(Doctrine_Collection)として取得できる。 (Zendはleft join などの条件をつけた結果は、arrayでしか取得できない) $query = Doctine_Query::create() ->from(‘Catetory c’) ->leftJoin(‘c.Job j’); ->where(‘j.location = ?’, ‘shibuya’); $categories = $query->execute(); $categories->Job[0] = ‘zinnan’; $categories->save();
- 6. Doctrineを調査した結果 ■ 便利だと思ったこと findByカラム名(‘カラム値’)で、レコードクラスを取得できる $table = Doctrine::getTable(‘Category’); $categories = $table->findByName(‘hogehoge’);
- 7. Doctrineを調査した結果 ■ 不便だと思ったこと テーブルのリレーションを使って、他テーブルを取得する際に、細かく条件を設定できない $table = Doctrine::getTable(‘Category’); $category = $table->findOneByName(‘hogehoge’); $cateogry->Job; ↑ category_idでつながっている全てがとれる
- 13. 拡張した機能 ■Zend_Db_Table_Row new された際に、テーブル定義されたdefault値を読み込む $job = new Hoge_Model_Mapper_Row_Job(); $job->category_id = 1; $job->email = “okeya@paperboy.co.jp”; $job->save(); (処理で何も設定しなければ、default値が反映される)
- 19. 拡張した機能 ■Zend_Db_Table_Rowset $select = Zend_Db_Table::getDefaultAdapter()->select(); $select->from(array(‘t1’ => ‘category’) ->joinLeft(array(‘t2’ => ‘job’), ‘t1.category_id = t2.category_id’, array()) ->where(‘t2.job_id is null’); $list = $select->query()->fetchAll(); $categories = new Hoge_Model_Mapper_Rowset_Category( array(‘data’ => $list)); $categories->deleteAll();
- 20. 拡張した機能 ■Zend_Db_Table_Rowset - setAllカラム名(‘カラム値’)で、Rowsetの全Rowに 値を設定できる - saveAll()で、Rowsetの全Rowにsave()を実行できる - deleteAll()で、Rowsetの全てのRowを削除する $category = new Hoge_Model_Mapper_Row_Category(); $jobs = $category->find(2)->findJob(); $jobs->setAllLocation(‘harajuku’)->saveAll();
- 21. 各クラスのソースコード final class Hoge_Model_DbTable_Category extends Pb_Db_Table_Abstract { protected $_name = "category"; protected $_primary = "category_id"; protected $_rowClass = "Hoge_Model_Mapper_Row_Category"; protected $_rowsetClass = "Hoge_Model_Mapper_Rowset_Category"; }
- 22. 各クラスのソースコード final class Hoge_Model_Mapper_Row_Category extends Pb_Db_Table_Row_Abstract { protected $_tableClass = "Hoge_Model_DbTable_Category"; } final class Hoge_Model_Mapper_Rowset_Category extends Pb_Db_Table_Rowset_Abstract { protected $_tableClass = "Hoge_Model_DbTable_Category"; protected $_rowClass = "Hoge_Model_Mapper_Row_Category"; }