将方法添加到生成的结果类

时间:2014-01-31 12:23:53

标签: perl dbix-class

我正在使用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()的函数。)

2 个答案:

答案 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);
};