以前某人の日記で見たS2Jdbcがなにやらかっこよさげだったので、PHPで似たものを作ってみてます。けっこう違っちゃったし、PHPらしくもっといいかげんだけど。
でせっかくなので公開してみる。バージョン0.1.0.
daomancy_v0_1_0.zip
はたしてPHPでこんなものまで使う人はいるのか? とか思わないでもないけど、まあおもしろそうなので。
どういうものかというと、つまり↓のようなことができます。
本家S2Jdbcとは微妙に違ってたり。
$page = Daomancy::_($dbh)
->from('PageDAO' , 'p')
->join('CategoryDAO' , 'c')
->on('p.category_id = c.category_id')
->where('p.name LIKE ?' , 'Daomancy%')
->and_('c.category_id = ?' , '1')
->and_(
Wheremancy::in('category_kbn' , array(0 , 1 , 9))
)
->orderBy('p.category_id ASC , p.page_id ASC')
->limit(10)
->offset(0)
->fetch();
やりたいことはだいたい見ればわかると思います。
PageDAOというクラスとCategoryDAOというクラスを結合してDBに問い合わせしてるわけです。
基本的にはテーブル単位のアクティブレコードを作っておけば、あとはDaomancyが結合してオブジェクトを生成してきてくれます。
とってきたものは、↓のように使えます。
$pageContents = $page->p->contents;
$categoryName = $page->c->name;
カラム名と同じ名前のpublicフィールドを持ってるのです。
ようするにアクティブレコードなんだけど、更新は↓のように。
$page->p->contents = 'ほげほげ';
$page->p->update();
複数テーブルまとめて更新とか。
$page->p->name = 'page新しい名前';
$page->c->name = 'category新しい名前';
$page->update();
インタフェースはこれでいいのか?とか、テストが不充分だったりとかするのでバージョン0.1ということで。
それにしても、andとorが予約語だったせいでメソッド名にアンダーライン_がついちゃってるあたりがちょっとかっこ悪い。