我正在使用DBIx::Class::Schema::Loader
从数据库架构生成(并不断重新生成)结果类。
是否有一种将方法添加到生成的类的自觉方式?
我目前所做的是在使用结果类的代码附近定义其他方法:
package Some::Package::Using::Result::Classes;
use My::Schema::Result::Hello;
...
1;
package My::Schema::Result::Hello;
sub str {
my $self = shift;
sprintf("Hello: %s, %d", $self->name, $self->age);
}
1;
(正如你所看到的,我正在尝试做的是添加一个类似toString()
的函数。)
答案 0 :(得分:2)
如果你看近生成结果类的顶部,你会看到这个评论。
# Created by DBIx::Class::Schema::Loader
# DO NOT MODIFY THE FIRST PART OF THIS FILE
注意,它表示你不应该修改文件的“第一部分”。
在文件的底部,你会看到这个。
# Created by DBIx::Class::Schema::Loader v0.07039 @ 2014-01-30 20:13:57
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:3eYA3YhJdL90HQRfNN07EA
# You can replace this text with custom code or comments, and it will be preserved on regeneration
因此,只要将其放在包含MD5哈希的行下,就可以将所需的任何代码添加到结果类文件中。当你重新生成课时,你放在那里的任何东西都会存在。
答案 1 :(得分:0)
我不知道这是否是惯用的,但它更紧凑:
*My::Schema::Result::Hello::str = sub
my $self = shift;
sprintf("Hello: %s, %d", $self->name, $self->age);
};