[Catalyst] Mapping Schema to Model in Catalyst?

Matt S Trout dbix-class at trout.me.uk
Tue May 16 01:51:31 CEST 2006


dennis wrote:
> On Sunday 14 May 2006 23:25, John wrote:
> 
>> I am sure seperating the Schema Class files from the
>> Catalyst model directory is the right way to go, sine
>> this give you a lot for flexibility.  Please let me
>> know what you find out, because I am planning to write
>> a more detailed version of this setup to put on the
>> Wiki someplace and can use the early feedback.
> 
> I think I've found the answer to how schema is mapped to model in doc for 
> Catalyst::Model::DBIC::Schema-0.13. (Unless this has been deprecated by 
> now ;-) ) I've not actually gotten this to work quite yet, but I think it may 
> just be missing a small something. Anyways, here's what I have based on the 
> above:
> 
> 
> 
> #------------------------------------
> Create the DBIx:Class schema
> #------------------------------------
> package Catapult::Schema::CatapultDB;
> 
> use warnings;
> use strict;
> use base qw/DBIx::Class::Schema/;
> 
> __PACKAGE__->load_classes(qw/Quotes/);
> 
> 1;
> #------------------------------------
> Create a class for the table in the database
> #------------------------------------
> package Catapult::Schema::CatapultDB::Quotes;
> 
> use base qw/DBIx::Class/;
> 
> __PACKAGE__->load_components(qw/ PK::Auto::Pg Core /);
> # Set the table name
> __PACKAGE__->table('quotes');
> # Set columns in table
> __PACKAGE__->add_columns(qw/id quote author/);
> # Set the primary key for the table
> __PACKAGE__->set_primary_key(qw/id/);
> 
> 1;
> #------------------------------------
> To expose it to Catalyst as a model...
> #------------------------------------
> package Catapult::Model::CatapultDB;
> 
> use warnings;
> use strict;
> 
> use base qw/Catalyst::Model::DBIC::Schema/;
> 
> __PACKAGE__->config (
>     schema_class => 'Catapult::Schema::CatapultDB',
>     connect_info => [
>                      'dbi::Pg:dbname=catapult',
>                      'catapult',
>                      '',
>                     {
>                      RaiseError => 1,
>                      PrintError => 0,
>                      ShowErrorStatement => 1,
>                      Tracelevel => 0,
>                     }]);
> 
> 1;
> #------------------------------------
> Now in my controller:
> #------------------------------------
> sub list : Path('/text/quote/list_quote') {
>   my ($self, $c) = @_;
> 
>   $c->stash->{quotes} = [$c->model('Quotes')->all];
>   $c->stash->{template} = 'text/quote/list_quote.tt';
> }
> #------------------------------------
> 
> I know my DB is setup correctly, my previous code based on Kennedy's auth 
> tutorial did at least retrieve the list of quotes in the quotes table.
> 
> Any thoughts?

$c->model('CatapultDB::Quotes')

just like I already said in my last reply to this thread.

Also note that on any recent DBIx::Class you only need to specify 
PK::Auto - it'll automatically select the Pg implementation for you.



More information about the Catalyst mailing list