[Dbix-class] How to specify the necessary scheme?

Wallace Reis wallace at reis.org.br
Thu Jan 28 16:13:27 GMT 2010


On 21/01/2010, at 12:46, Konstantin at Tokar.RU wrote:
> Hi, All!
> 
> How to use the schema description generated Schema::Loader, for the scheme necessary to me?
> For example, there is class DBIC::EMULATOR::Cruise, I write for the current scheme
> 
> use DBIC::EMULATOR;
> my $schema = DBIC::EMULATOR->connect(...);
> my $record = $schema->resultset('ship')->search()->first ();
> 
> But if I need to address to tables of other scheme, for example EMULATOR2, EMULATOR3, how it to make? 
> Something like 
> 
> my $record = $schema->resultset(EMULATOR2.ship')->search ()->first();
> my $record = $schema->resultset(EMULATOR3.ship')->search ()->first();


You can create separate namespace for each *db schema* you have under your *DBIC schema* one, then
you use the qualified table name when you set up the result class:

if your DBIC schema is DBIC::EMULATOR,

<code>
package DBIC::EMULATOR::EMULATOR1::ship;

use parent 'DBIx::Class::Core';

__PACKAGE__->table('EMULATOR1.ship');
[...]

package DBIC::EMULATOR::EMULATOR2::ship;

use parent 'DBIx::Class::Core';

__PACKAGE__->table('EMULATOR2.ship');
[...]

</code>

thus, when you need to get the resultset for this result class you do:

my $emulator1_ship_rs = $schema->resultset('EMULATOR1::ship');
my $emulator2_ship_rs = $schema->resultset('EMULATOR2::ship');

--
   wallace reis/wreis         Catalyst and DBIx::Class consultancy with a clue
   Software Engineer          and a commit bit: http://shadowcat.co.uk/catalyst/
Shadowcat Systems Limited
http://www.shadowcat.co.uk     http://www.linkedin.com/in/wallacereis


More information about the DBIx-Class mailing list