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というモジュールが出てきました。こっちのモジュールのが効率がいいみたいですけれどもそれはまた後ほど。