package MySchema;
use strict;
use base qw(DBIx::Class::Schema::Loader);__PACKAGE__->loader_options(...);
sub connection {
my $class = shift;
my $schema = $class->SUPER::connection(@_);
my $classes = $schema->loader->classes;while (my($table, $schema_class) = each %$classes) {
foreach my $column ($schema_class->columns) {
# do something with $column
}
}
$schema;
}
俺の場合、ただ"_on"で終わるカラムを全てDateTimeにしたかったので、
package MySchema::Base;
use strict;sub has_datetime {
my $class = shift;
foreach my $column (@_) {
$class->inflate_column($column, {
inflate => sub { DateTime::format::Pg->parse_datetime(shift) },
deflate => sub { DateTime::format::Pg->format_datetime(shift) },
});
}
}package MySchema;
__PACKAGE__->loader_options(..., additiona_base_classes => [ qw(MySchema::Base) ], ...);
で、さっきの"do something with..."のところで
while (my($table, $schema_class) = each %$classes) {
$schema_class->has_datetime(grep { /_on$/ } $schema_class->columns);
}
ディモォォォォルトッ
カテゴリ
開発トラックバック(0)
このブログ記事に対するトラックバックURL: http://mt.endeworks.jp/cgi-bin/mt-tb.cgi/1148


コメントする