PHPのORM。SymfonyのデフォルトORMになった
http://www.doctrine-project.org/documentat...
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してコピーして対処した。もっとマシな方法ないのか。