[Catalyst] Mapping Schema to Model in Catalyst?

dennis ddaupert at sbcglobal.net
Tue May 16 01:40:24 CEST 2006

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 

Create the DBIx:Class schema
package Catapult::Schema::CatapultDB;

use warnings;
use strict;
use base qw/DBIx::Class::Schema/;


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
# Set columns in table
__PACKAGE__->add_columns(qw/id quote author/);
# Set the primary key for the table

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 => [
                     RaiseError => 1,
                     PrintError => 0,
                     ShowErrorStatement => 1,
                     Tracelevel => 0,

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?


More information about the Catalyst mailing list