Class::DBI::Plugin::TimePiece::MySQL
Class::DBIとTime::Pieceを連携(infalteやdefalte)させてみるてすと。
package Class::DBI::Plugin::TimePiece::MySQL; use Time::Piece::MySQL; sub import { my $class = shift; my $pkg = caller(0); unless($pkg->isa('Class::DBI')){ warn (__PACKAGE__." is for Class::DBI application."); } no strict 'refs'; *{"$pkg\::has_a_date"} = sub { _insert_has_a( 'date', @_ ) }; *{"$pkg\::has_a_timestamp"} = sub { _insert_has_a( 'timestamp', @_ ) }; *{"$pkg\::has_a_datetime"} = sub { _insert_has_a( 'datetime', @_ ) }; } sub _insert_has_a { my $type = shift; my $self = shift; foreach (@_) { $self->has_a( $_ => 'Time::Piece', inflate => "from_mysql_$type", deflate => "mysql_$type", ); } } 1;
んで、DBI側で以下のように呼び出す。
package HapiMate::TableTest; use base 'HapiMate::DBI'; use Class::DBI::Plugin::TimePiece::MySQL; __PACKAGE__->set_up_table('table_test'); __PACKAGE__->has_a_datetime('dates'); 1;
has_a_datetime以外にも、もちろんhas_a_dateやhas_a_timestampも使える。
そして、こんな感じで使う。
package main; use HapiMate::TableTest; my $cd = HapiMate::TableTest->create({ 'id' => 0 }); $cd->dates( time ); $cd->update;
いい感じ