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抜きでは無理になってきた。