inflate_column
ブログが続かないわけ | DBIC で+select と+as : ああ、今頃気づくなんて...
でも、どうにも不便だと思ってDBIx::Class::ResultsetのPODを読んでいると、+select と+as なるものがあるじゃないですか。これだと、まさに先ほど直感的に書いたような方法で書けるのです。
$c->model('DBIC::TranDiary')->search( $query_ref, { '+select' => [ { date_format => 'me.create_date,\'%Y/%m/%d\'' }, ], '+as' => [ qw/create_date/ ] } );これって常識なんだろな。だってPODに書いてあるんだもん。
ちょっとへこみました。
+select と +as なんて、あるんだなー便利だなーと思いつつ、それは、inflate_column を使った方が良いんじゃないかと思いました。
上記の例であれば、xxxxx::Model::DBIC::TranDiary に下記を追加。
__PACKAGE__->inflate_column( 'create_date', { inflate => sub { DateTime::Format::xxx->parse_datetime(shift); }, deflate => sub { DateTime::Format::xxx->format_datetime(shift); }, } );
DateTime::Format::xxx の、xxx の箇所は、Pg、MySQL、Oracle、DB2 等が CPAN にあるので、環境にあわせて選択。
search メソッドだけでなく、create メソッドでも使えるので、こちらの方が便利かと。