DBIx::Class::ResultClass::HashRefInflator
とかいうのがDBICのCoreに入りました。
使い方は簡単?で
use DBIx::Class::ResultClass::HashRefInflator; my $rs = $self->model('Blog'); $rs->result_class('DBIx::Class::ResultClass::HashRefInflator'); my $member = $rs->single({rid => 'HXOK7cI4DA'}); warn Dumper $member;
こんな感じでresult_classに設定してやると
結果として
$VAR1 = { 'timestamp' => '2007-01-18 17:03:06', 'member_id' => '15', 'created_on' => '2007-01-18 17:03:06', 'id' => '34', 'rid' => 'HXOK7cI4DA', 'title' => 'Hatena::Diary::Neko::kak' };
こんな感じのHashが取れるです。
#dbix-classでの話しだったかと思うのですが、
DBICはキャッシュしにくいよねふがふがとか言う話題のときにこれ使えば?
とか言ってたような言って無いような。
キヲクは定かではございません。
HashRefInflatorはprefetchも面倒見てくれるみたい。
ちなみにDBIx::Class::AsFdatってのを私が作ってますが、
http://search.cpan.org/dist/DBIx-Class-AsFdat/lib/DBIx/Class/AsFdat.pm
これも同じようなモジュールです。
AsFdatは
# load_componentsは別途しておいて下さい my $rs = $self->model('Blog'); my $member = $rs->single({rid => 'HXOK7cI4DA'}); warn Dumper $member->as_fdat;
こんな感じで使ってやると
$VAR1 = { 'created_on_month' => 1, 'created_on_hour' => 17, 'rid' => 'HXOK7cI4DA', 'created_on_second' => 6, 'timestamp' => '2007-01-18 17:03:06', 'member_id' => '15', 'created_on' => bless( { 'local_rd_secs' => 61386, 'local_rd_days' => 732694, 'rd_nanosecs' => 0, 'locale' => bless( { 'default_time_format_length' => 'medium', 'native_territory' => 'United States', 'native_language' => 'English', 'native_complete_name' => 'English United States', 'en_language' => 'English', 'id' => 'en_US', 'default_date_format_length' => 'medium', 'en_complete_name' => 'English United States', 'en_territory' => 'United States' }, 'DateTime::Locale::en_US' ), 'local_c' => { 'hour' => 17, 'second' => 6, 'month' => 1, 'quarter' => 1, 'day_of_year' => 18, 'day_of_quarter' => 18, 'minute' => 3, 'day' => 18, 'day_of_week' => 4, 'year' => 2007 }, 'utc_rd_secs' => 61386, 'formatter' => undef, 'tz' => bless( { 'name' => 'floating', 'offset' => 0 }, 'DateTime::TimeZone::Floating' ), 'utc_year' => 2008, 'utc_rd_days' => 732694, 'offset_modifier' => 0 }, 'TestDBIC::DateTime' ), 'id' => '34', 'title' => 'Hatena::Diary::Neko::kak', 'created_on_day' => 18, 'created_on_year' => 2007, 'created_on_minute' => 3 };
こんな感じのHashを吐き出します。これはFillInFormするときに便利な予定。
日付とかをばらばらにしてそれぞれハッシュにするので。
DateTimeを使うことが前提になってるモジュールですが。
個人的にはHashRefInflatorよりもAsFdatのが使いやすくね?とか思ってるのですがどうでしょうかね。