Doctrine 1.1 is now available!
Today I am very pleased to bring news to you that Doctrine 1.1.0 stable is available.
http://www.doctrine-project.org/blog/doctrine-1-1-released
ついにDoctrineの1.1が正式リリースされました。長かったですが、バグフィックスをがんばってたんですかね。
Hilights
- Hydration用のメソッドの追加
- マイグレーション用のDiffツールを追加
- fromArray()およびtoArray()でカスタムアクセサのサポート
- getModified(), toArray(), fromArray(), synchronizeWithArray()の改善
- Searchable, SoftDelete, Versionableビヘイビアの改善
- 様々なAPIの改善や追加
- その他バグフィックス
いくつかの修正に関しては以前書いた(Doctrine 1.1 Alphaがリリース - ゆっくり*ゆっくり)のですが、それ以外の点について簡単にいくつかピックアップしてみます。
SoftDelete
SoftDeleteビヘイビアは、以前会社のブログ(Doctrineで論理削除を意識せずに扱う - アシアルブログ)でも紹介したのですが、deletedというboolean型のカラムを用いて論理削除を実装するためのテンプレートでした。
これが1.1からは、booleanからtimestampになり、カラム名もdeleted_atに変更されました。これにより、レコードに対してdeleteを発行した際にdeleted_atに削除時のタイムスタンプが自動的に入るようになり、deleted_atがNULLでないものは削除済みとみなす、という実装になっています。
一応互換性を考慮して、以前のbooleanでの論理削除の対応もされているみたいです。
Custom Accessor/Mutator
Accessorはゲッター、Mutatorはセッターです。通常、$user->get('name')を行った際に、Doctrine内部の属性「Doctrine::ATTR_AUTO_ACCESSOR_OVERRIDE」がtrueに設定されている場合はgetName()が実装されていればそのメソッドを見るというものでした。
ようするにset + カラム名のメソッドという名前に限定されていましたが、これのメソッド名を自由に設定できるようになりました。
<?php public function setTableDefinition() { $this->hasColumn('username', 'string'); } public function setUp() { $this->hasAccessor('username', 'customUsernameAccessor'); $this->hasMutator('username', 'customUsernameMutator'); } public function customUsernameAccessor() { return $this->_get('username'); } public function customUsernameMutator($value) { $this->_set('username', $value); }
RecordListener
RecordListenerの有効/無効の切り替えが簡単にできるようになりました
<?php // 全てのレコードリスナーの全てのリスナーメソッドを無効 Doctrine::getTable('Foo')->getRecordListener()->setOption('disabled', true); // 全てのレコードリスナーから指定したリスナーメソッドを無効 Doctrine::getTable('Foo')->getRecordListener()->setOption('disabled', array('preSerialize', 'postHydrate')); // 指定したレコードリスナーの全てのリスナーメソッドを無効 Doctrine::getTable('Foo')->getRecordListener()->get('FooListener') ->setOption('disabled', true); // 指定したレコードリスナーの指定したリスナーメソッドを無効 Doctrine::getTable('Foo')->getRecordListener()->get('FooListener') ->setOption('disabled', array('preSave', 'postInsert'));
有効はenableっぽいです。ソースコードは見てないので間違ってるかもしれませんが。
disabledオプションがtrueもしくは配列でかつ該当するリスナーメソッドが含まれている場合に無効になるようです。setOptionメソッドにtrueもしくは不要なものを除いた配列を渡せばOKっぽいです。
他にも色々修正されているみたいです。興味があれば以下のページを眺めてみるといいかもしれません。
次のバージョンとして、Tracのロードマップ上に1.2があるようです。まだブランチは切られていないみたいですが、一応リリースは6月1日となっています。
その次はいよいよ2.0になるんですかね。あと半年もないのかー。そもそもPHP 5.3がリリースされてないし、2.0はまだまだかかりそうな予感です。