■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に。
[]

