以前某人の日記で見たS2Jdbcがなにやらかっこよさげだったので、PHPで似たものを作ってみてます。けっこう違っちゃったし、PHPらしくもっといいかげんだけど。
でせっかくなので公開してみる。バージョン0.1.0.
はたして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が予約語だったせいでメソッド名にアンダーライン_がついちゃってるあたりがちょっとかっこ悪い。