Class::DBI::Pager
恥ずかしくも最近知ったばっかりのClass::DBIモジュールなんですけれども、サブクラスのモジュールの多さを見てすごいモジュールなんだな、と思い知らされます。
さて、このClass::DBI::Pagerですけれども、まんまページャです。全体で120件とかあるデータを15件ずつ表示したい場合などに数値を指定すると該当のデータだけを持ってきてくれます。
Class::DBI::Loaderで作ってもよかったんですけれども、なぜか指定したモジュールをuseしてくれるはずのコンストラクタのadditional_classesパラメータを指定してもなんだかエラーが出るのでとりあえずたいした手間でもないので自己生成。
package Mailer::Mail; use base 'Class::DBI::SQLite'; __PACKAGE__->set_db('Main', 'dbi:SQLite:test.db'); use Class::DBI::Pager; __PACKAGE__->set_up_table('mail');
use baseのすぐ下にuse Class::DBI::Pagerと宣言したら動きませんでした。どうやらset_dbした後でないとダメっぽいのでそうしました。
そしてページャの本体
use Mailer::Mail; print Mailer::Mail->pager(2,3)->retrieve_all;
たとえば
From | To | Text |
---|---|---|
A | Z | AtoZ mail |
B | Y | BtoY mail |
C | X | CtoX mail |
D | W | DtoW mail |
E | V | EtoV mail |
F | U | FtoU mail |
G | T | GtoT mail |
H | S | HtoS mail |
こんなデータがあると
From | To | Text |
---|---|---|
E | V | EtoV mail |
F | U | FtoU mail |
こう値が返ってきます。pagerメソッドは二つ引数をとって、1番目の引数を1ページとして第二引数番目のページ目の値を返してくれます。上記だと1ページ2項目でそれの3番目だから5,6番目の値が返ってきます。
そしてこのモジュールについて検索していたらClass::DBI::Plugin::Pagerというモジュールが出てきました。こっちのモジュールのが効率がいいみたいですけれどもそれはまた後ほど。