[Dbix-class] Difficulties with DBIx::Class inheritance

Rich scriptyrich at yahoo.co.uk
Sat Jun 24 18:15:47 CEST 2006

Could anyone help me get my head around how I implement a common base 
class for, and subclasses of, autogenerated DBIx::Class classes?

Going with a simple example:

    Foo::User    Foo::Project       <<< My sub classes
       |             |
       |             |
    Foo::user    Foo::project       <<< sqlt generated DBIx::Class classes
        \           /
         \         /
          \       /
           \     /
            \   /
             \ /
         Foo::Base                   <<< Common functionality

1) Foo::Base would hold common functionality for sub classes.

2) A::B::user and A::B::project would probably be defined within Foo.pm as 
autogenerated by sqlt:

  sqlt --from DBI --to DBIx::Class::File --prefix Foo --dsn DBI:mysql:foo > Foo.pm

3) Foo::User, Foo::Project would be the concrete subclasses, both adding new 
methods, and overriding methods in Foo::user, Foo::project.

So in the main code:

  use Foo;

  my $schema = Foo->connect('DBI:mysql:myapp');

  my $rs = $schema->resultset('User');     # Should get me the resultset for Foo::User

  $rs->create ....
  $rs->search ....

Normally I'd have no problems setting this up, but DBIx::Class seem a little 
more complex in the way it handles inheritance and registers classes 
and I'm not sure of the correct way to do this - I've tried a few things and I 
end up with instances of Foo::user rather than Foo::User (same with project) 
so something's clearly wrong.

I'd be really grateful if someone can tell me if this is possible (or what I 
should be doing instead) and could post an outline of how I would 
achieve this correctly using DBIx::Class. I'm happy to turn this thread
(if I get some replies) into a FAQ for the docs if that's of any use.

Many thanks,
scriptyrich at yahoo.co.uk

More information about the Dbix-class mailing list