Class::DBI::Pager

Catalystでページ処理をしたいということで、Class::DBI::Pagerを使ってみたヨ。

my $pager = CD->pager(20, 1); # ($items_per_page, $current_page)

という感じで書いとけば、あとはよきにはからってくれる。

新しい順に取り出したいときなんかはORDER BY入れたいが、そんなときはこんな感じで。

sub default : Private {
 my ( $self, $c ) = @_;
 $c->stash->{page} = $c->request->param('page');
 my $pager = Publicious::Model::CDBI::Items->pager(
 $c->config->{items_per_page},$c->stash->{page} ||1);

$c->stash->{it} = $pager->retrieve_from_sql(
                      qq( 1 ORDER BY id DESC));

$c->forward('display');
}

search_likeとかもいける。あとでソースをきちんと読んでみよう。

DateTimeでフォーマット変換

DateTime->todayとかDateTime->nowを知った。今までシコシコ書いてたヨ。しかもDateTime::Format::MySQLでmysqlのDatetime型に変換してくれるので快適

use DateTime; use DateTime::Format::MySQL; my $today = DateTime->now; print DateTime::Format::MySQL->format_datetime($today);

CDBIでCOUNTするには

まぁ、いまのところ(というか二日目なので)出来るだけset_sqlを使わないゾ週間は守られていますヨ。

いまdel.icio.us.li.keを作っているのだが、あるURLを何人がブックマークしているかカウントする必要が生じた。

CDBIってcountメソッドサポートしてなさげ、ピンチ!

でも大丈夫、しのいだ。Class::DBIのPluginClass::DBI::Plugin::AbstractCountってのがあったからな。

catalystのModelに

use Class::DBI::Plugin::AbstractCount;

といれたら、あとは

$c->stash->{itemlist}->[$i]->{sub_users} = Publicious::Model::CDBI::Items->count_search_where( { pubmedid => $col->pubmedid});

という感じで、カウントできる。