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

コメントする

筆者

daisuke - a.k.a. "lestrrat", Perl hacker at Livedoor Inc, Japan Perl Association 代表理事

このブログ記事について

このページは、Dが2006年8月11日 14:35に書いたブログ記事です。

ひとつ前のブログ記事は「きっとPerlな人しか面白くないんだろうな」です。

次のブログ記事は「早速買った」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.1