ログ日記

作業ログと日記とメモ

O/Rマッパーに疑似ビュー機能を追加した

今までDBにビューを作っていたものを、やっぱりDBをいちいち変えるのが面倒なのでormで対応することにした。


myview.sql

select col1, col2 
from t1
%s
order by col3
limit 1

こんなselect文があるとすると

<?php

class MyAction
{
    public $num;
    public $vo;

    public function execute(DaoFactory $factory)
    {
        $dao = $factory->get();
        $where = 'where col3 > ?'; // 実際は条件によってwhere句が複雑に変わる場合とかに利用
        $this->vo = $dao->getViewVo('myview', $this->num, $where);
    }
}

という感じの処理。
もちろん動的な部分(ここでは$where)が無ければ第3引数は要らないし、変数を利用しないのであれば第2引数も要らない。


そんなに複雑なことはしていない。
http://laiz-source.googlecode.com/svn/Laiz/branches/TRY-3.0/laiz/webapp/components/Laiz/OrMapper.php
これの下の方のviewと書いてある部分。


bindViewの部分はイテレータ と連携するためのものだから、実質70行くらいか。



思い付きで書いたので、まずい構造があるかもしれない。後で見直す。
データの更新とか複数の行を取得する処理も後で。まぁ複数行表示はイテレータ書けばできるわけだから、



他のフレームワーク(というかO/Rマッピングツール?)では、イテレータとか使えるんだろうか。
最近orm+iterator抜きでは無理になってきた。