トップ «前の日記(■2010-01-31) 最新 次の日記(■2010-03-08)» 編集

どんぞこ日誌

2003|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|07|08|12|
2007|01|04|08|12|
2008|01|02|03|04|06|07|08|10|11|12|
2009|01|02|04|05|06|07|08|09|11|12|
2010|01|03|04|07|08|10|11|12|
2011|01|02|03|04|05|06|07|08|10|12|
2012|01|02|03|05|06|07|08|09|10|
2013|01|02|07|08|09|
2014|08|09|
2015|08|
2016|06|07|12|
2017|01|03|08|
2018|03|
2022|03|
2023|03|
2024|02|

同人関連(どんぞこ楽屋) | 旧い雑文   


■2010-03-03

* [Perl] DBIx::SkinnyをDBIx::Classな感じで使うB!

  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に。

[]