[Dbix-class] How to use a model with a different table name
Jonathan Rockway
jon at jrock.us
Wed Jul 2 17:07:27 BST 2008
* On Mon, Jun 23 2008, Tobias Kremer wrote:
> Quoting Emmanuel Quevillon <tuco at pasteur.fr>:
>> I have a module DB::GenericTable.pm which reflects a
>> 'generic' table schema into my database associated to a
>> table name in the DB.
>> I'd like to kow how can I access another table (different
>> name) but with the same schema (same column name, same
>> datatype) from my perl module? Someting like
>
> I'd say by making a base table class and subclassing from it:
>
> package DB::GenericTable;
> use strict;
> use warnings;
> use base 'DBIx::Class';
> __PACKAGE__->load_components("Core");
> __PACKAGE__->table("genericname");
> __PACKAGE__->add_columns(...);
> 1;
>
> package DB::DerivedTable;
> use strict;
> use warnings;
> use base 'DB::GenericTable';
> __PACKAGE__->table("othertable");
> 1;
No, that won't work. Why would __PACKAGE__ in DB::GenericTable have
anything to do with DB::DerivedTable?
Try this instead:
package Superclass;
use base 'DBIx::Class';
sub setup_table {
my ($class, @args) = @_;
$class->load_components('Core');
...
}
package Subclass;
use base 'Superclass';
__PACKAGE__->setup_table( ... );
Note that you don't need to use inheritance for this either, you can
have a helper module make the tables for you. See DBICx::MapMaker for
example.
Regards,
Jonathan Rockway
--
print just => another => perl => hacker => if $,=$"
More information about the DBIx-Class
mailing list