遊星ゲームズ
FrontPage | RSS


Daomancy バージョン0.1.0
 プログラム

 以前某人の日記で見た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が予約語だったせいでメソッド名にアンダーライン_がついちゃってるあたりがちょっとかっこ悪い。

.toDo

  • 一行ずつ取得
     でもそれステートメントをいつ開放するのかとか考えてから。
  • いろんなDB対応……?
     だいたいてきとうに動きそうだけど。なにしろ個人の環境にいろんなDB入れるのもあれだからテストができてない。
  • マニュアル
     バージョン上がることがあったら。
  • DISTINCTとかSELECT FOR UPDATEとか?
  • サブクエリ?
     実はすぐできそうだけど試してない。

Daomancy バージョン0.1.0を