読者です 読者をやめる 読者になる 読者になる

pixyzehn blog

iPhone App, Mac App, Programming, Web service, Tool, Evernote, etc

TengプラグインのPagerで少し複雑なSQLを書きたいときに使ったTeng::Plugin::SQLPager

f:id:inagex:20150510225657p:plain


Tengのプラグインに関してです。


お久しぶりです。

いきなり更新したと思いきや、Perlかよって思われそうですが、備忘録として書きます。

PerlのWAFであるAmon2のO/RマッパーでTengというものを利用していて、Tengにはプラグインでpagerというものがあるのですが、そのプラグインだと

my ($rows, $pager) = 
    $self->search_with_pager(
    'users' => {user_id => $user_id},
    {page => $page, rows => 5}
);

となりJOINを利用したSQLなどを実行したいときにこの便利なpagerという機能が使えなくなってしまいます。

: include 'include/pager.tx' { pager => $pager };

f:id:inagex:20150510230527p:plain

テンプレートにこれを書くだけでこんなのができる。

個人的にはこのpager機能を使いたかったので、それに関するCPANモジュールを探してみました。

meta::cpan

タイトルにもありますが、いくつか触ってみてTeng::Plugin::SQLPagerというのが今のところよさそうでした。

my ($rows, $pager) = $self->search_by_sql_with_pager(q{
    SELECT T2.*
    FROM hoge T1
    JOIN fuga T2
    ON T1.fuga_id = T2.id
    WHERE T1.id = ?
}, [$id], {page => $page, rows => 10});

テーブル名、カラム名は適当です。
けっこう古いモジュールで今も使えるのか不安でしたが(CPAN全般にいえるかも)、普通に使えたのでよかった。

github.com

Perlのモジュールについての情報は基本的に古い気がするので、新たな情報として発信していければと思います。

参考

Teng::Plugin::SQLPager - Paginate with SQL - metacpan.org

Pager Night - Symphogear