Daomancy - Simplematic O/R Mapper for PHP

SourceForge.jp
 Daomancyは、一目でわかるインタフェースで、DBからデータオブジェクトを生成するデータアクセスフレームワークなのです。
 とりあえず下のソースコードを見てください。
$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')
    ->fetch();
 なにができるか、わかったでしょうか。こういうことをします。
 上の例では、DB上のpageテーブルとcategoryテーブルからそれぞれPageDAOオブジェクトとCategoryDAOオブジェクトを生成しているのです。
 見てのとおり、SQLをある程度知っていれば誰にでもすぐにわかります。

 オブジェクト指向を導入してもっともうれしいのはデータアクセス処理です。しかし、実現方法をいろいろ考えてみると難しいです。
 Daomancyでは、オブジェクトの単位をばっさりとテーブル別に分けてしまいました。その代わり、上の例のようにオブジェクトを結合して生成できます。


特徴



つかいかたの例

 簡単な例です。
require_once 'Daomancy.php';
require_once 'PageDAO.php';		//取得に使うクラスは読みこんでおきます
require_once 'CategoryDAO.php';

$dbh = new PDO(DSN);		//PDOを使います

$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')
	->orderBy('p.category_id ASC , p.page_id ASC')
	->limit(10)
	->offset(0)
	->fetchAll();
 これをHTMLに表示してみます。
 まずはHTML特殊文字をエスケープしなければなりません。
 ここでは、パッケージの中についでに入っているMultiWrapperを使ってみます。
 Ethnaなど気の利いたフレームワークを使っているなら、フレームワークが提供するエスケープ処理を使えばいいです。
$mw = new MultiWrapper('htmlspecialchars');		//エスケープ処理
$page = $mw->wrap($page);
 じっさいにはテンプレートエンジンなど使うことも多いと思いますが、ここでは素のPHPで。
 HTMLは下のような感じになるでしょう。
<table>
<? foreach($page as $v): ?>
	<tr>
	<td>
	<? if($v->p->isNew(): ?>
		<img src="new.gif" />
	<? endif ?>
	<?= $v->p->page_id ?>
	</td>
	<td>
	<?= $v->p->name ?>
	</td>
	<td>
	<?= $v->c->name ?>
	</td>
	</tr>
<? endforeach ?>
</table>
 ある程度のロジックは各アクティブレコードに書いてしまうことができるので(上の例のisNew())、簡単な画面ならDaomancyで取得したものをエスケープするだけでプログラムは完成です。


クラス一覧