« 間違えたーーー!! | メイン | 奥多摩BBQ »

2010/10/19

KohanaのORMについて徒然

http://gist.github.com/632600

KohanaオリジナルのORMはとってもシンプル。
シンプルすぎてそのまま使うと危険なほど。


いくつか実運用時に気になった点を修正したORMを上げてみました。


1) Column list

テーブル定義を動的にとるのがデフォルトとされています。
これは、Cakeとかでもそうだしまぁ問題ないですね。
ただ、なぜかコレがキャッシュされません。

SQL異常に多いなーと思って中見たら、
毎回show columns クエリー飛ばしているじゃありませんか。
ということでファイルに1日キャッシュ。

alterしたりしたあとはcacheディレクトリ削除すればよし。

2)Has many

デフォルトは、
$user->child->find_all();
のようにもう一回クエリを飛ばしなさいよ!ってことらしい。

Joinして絞り込みたい時もあるでしょうが。使いようだと思います。

なのでwith()を拡張して$user->with('child')でLeft joinさせます。
あまり負荷を考えるとよろしい作法ではないですが、
使いどころ次第かと思います。

3) 透過キャッシュ

せっかくrowオブジェクトを持っているのだから
レコード更新時にキャッシュ更新したり、
参照時にキャッシュからとったりは透過的にできるでしょう。

findはPKで参照している時しか対応しづらかったのでそこまでですが、
アプリ作る際に意識していればこれであらかたキャッシュは回せるかと思います。

save_with_cacheでselectしなおしているのがちょっとダサいが、
たいていの更新はもとのrow objectがloadedなので問題ないはず。

コメント

フィード You can follow this conversation by subscribing to the comment feed for this post.

書き忘れたけど、transaction用関数もMySQLだけとりあえず追加

この記事へのコメントは終了しました。