Doctrineの履歴

PHPORM。SymfonyのデフォルトORMになった

http://www.doctrine-project.org/documentation/manual/1_2/ja

DQL

SQLDoctrineで扱い易いように解釈したもの
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してコピーして対処した。もっとマシな方法ないのか。