[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
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?
/dennis
More information about the Catalyst
mailing list