DBIx :: Class :: Schema :: Loader ResultSource базовый класс - PullRequest
3 голосов
/ 12 мая 2011

Я использую DBIx::Class::Schema::Loader для создания статической ORM для моей базы данных.Я использую следующий метод для его создания и определения базовых классов для ResultSet и Result классов, в которые я могу подключить общие подпрограммы:

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, в который я могу подключить такие вещи, как указано выше?

Спасибо!

1 Ответ

0 голосов
/ 26 мая 2011

Это одна из наименее изученных и плохо документированных областей DBIx :: class.

Я думаю, что вы можете сделать это, создав компонент и загрузив его, используя:

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

Смотри http://search.cpan.org/dist/DBIx-Class/lib/DBIx/Class/Manual/Component.pod

...