3

我正在使用DBIx::Class::Schema::Loader为我的数据库创建静态 ORM。我使用以下方法创建它并指定基类ResultSetResult我可以插入通用子类的类:

make_schema_at(
'MyApp::Schema',
{ 
    debug => 1, 
    dump_directory => '/home/rob/projects/myapp/MyApp/lib',
    overwrite_modifications => 1, 
    components=> ['EncodedColumn'],
    use_namespaces          => 1,
    result_base_class       => 'MyApp::Schema::ResultBase',
    default_resultset_class => 'ResultSetBase'
},
[ 'DBI:mysql:database=mydb;host=localhost;port=3306','user', 'pass' ],
);

这就像一个魅力,但我不知道如何创建一个基类ResultSource。我想将一个子插入该类,以便我可以执行类似(伪代码)的操作:

$c->model('DB')->source->('Account')->getParentSource('Project');

ResultSourceBase.pm:

sub getParentSource {
     my ($self,$parent) = @_;
     foreach $relation in $self->relations
         if ($relation->identifier eq  $parent)
             return $relation->source;

     return $self;
}

谁能告诉我如何告诉加载器使用一个基ResultSource类,我可以在其中插入像上面这样的东西?

谢谢!

4

1 回答 1

0

这是 DBIx::class 中最不被理解和文档记录最差的领域之一。

我认为您可以通过创建一个组件并使用以下方式加载它来做到这一点:

__PACKAGE__->load_components(qw/ +My::Component /);

请参阅http://search.cpan.org/dist/DBIx-Class/lib/DBIx/Class/Manual/Component.pod

于 2011-05-25T22:31:46.553 回答