Doctrineの履歴
PHPのORM。SymfonyのデフォルトORMになった
http://www.doctrine-project.org/documentation/manual/1_2/ja
DQL
SQLをDoctrineで扱い易いように解釈したもの
Doctrin_QueryをtoStringするとこれが取得できる
- テーブル名の変換(クラス名→テーブル名)
- Joinの変換
from等で指定する場合テーブル名でなく対応するクラス名を入力する。
基本
$collection = Doctrine::getTable('User')->findAll(); // Doctrine_Collection $collection = Doctrine::getTable('Diary')->createQuery() ->where('user_id = ?', 1) ->execute(); $record = $collection = Doctrine::getTable('Diary')->create( array('user_id' => 1, 'text' => 'text')); // Doctrine_Record $record->save();
ハイドレーション
データ取得の方法。
// クラス定義して class Doctrine_Hydrator_MyHydrator extends Doctrine_Hydrator_Abstract{ ... } // 登録して $manager->registerHydrator('my_hydrator', 'Doctrine_Hydrator_MyHydrator'); // fetchするときに指定 $q->execute(array(), 'my_hydrator');
フィールドがobjectの場合、saveでupdateされない
Doctrine_Recordの値が変更されてないとsave()してもupdateが発行されないようになってる。オブジェクトの中身を変更しても、変更したことにならない。
違うオブジェクトをnewしてコピーして対処した。もっとマシな方法ないのか。