■2010-03-03
* [Perl] DBIx::SkinnyをDBIx::Classな感じで使う
DBIx::Classに慣れた人がDBIx::Skinnyを気軽に使えるように、DBIx::Class::Resultsetっぽいインターフェースをつけてみようと思い:
my $rs = $skinny->resultset_dbictic( 'foo', { 'id' => 1 }, { 'select' => [ 'hoge', 'huga' ], 'order_by' => 'id DESC', } ); # group_by, havingなども
ページングもつけようかな:
my $rs = $skinny->resultset_dbictic( 'foo', undef, { 'page' => 1, rows => 10, 'order_by' => 'id DESC', } ); my $itr = $rs->retireve; my $pager = $itr->pager; # 内部でcount用のステートを発行する。必要ならcount_subrefを渡す # (カウント用SQLと結果用カラムを返すサブルーチンリファレンス)。
いっそスキーマでリレーション定義してjoinできるように:
package Your::Model::Schema; use DBIx::Skinny::Schema; use DBIx::Skinny::DBICTic::Schema; install_table 'user' => schema { pk 'id'; columns qw(id name); has_many 'books' => 'user_book' => 'user.id = user_book.user_id'; }; install_table 'user_book' => schema { # ... }; # package main; my $rs = $skinny->resultset_dbictic( 'user', { 'user.id' => 1 }, { 'join' => [ 'books' ], '+select' => [ qw( books.name ) ], '+as' => [ qw( book_name ) ], } ); # prefetch相当の機能は無し
DBIx::Class使えよ、という本末転倒なわけですが、せっかくなのでhttp://github.com/makamaka/p5-dbix-skinny-dbicticに。