NAME
Catalyst::Model::DBIDM - DBIx::DataModel model class
VERSION
Version 0.01
SYNOPSIS
1 Create the DBIx::DataModel schema in MyApp/Schema.pm:
package MyApp::Schema;
use DBIx::DataModel;
DBIx::DataModel->Schema('MyApp::DM');
MyApp::DM->Table(qw/ MyApp::DM::Employee employee emp_id /);
MyApp::DM->Table(qw/ MyApp::DM::Department department dpt_id /);
...
Notice that the DBIx::DataModel is MyApp:DM, not MyApp::Model::DM.
It is usable as a standalone schema, without the need for Catalyst.
In fact, it does not even need to be in the MyApp namespace.
2 To expose it to Catalyst as a model, create a DBIDM in
MyApp/Model/DBIDM.pm:
package MyApp::Model::DM;
use base Catalyst::Model::DBIDM;
use MyApp::Schema; # to create the classes MyApp::DM
__PACKAGE__->config(
schema_class => 'MyApp::DM',
connect_info => [
'dbi:...',
'username',
'password',
{ RaiseError => 1 },
],
);
Now you have a working model, bound to your DBIx::DataModel schema, that
can be accessed the Catalyst way, using $c->model().
my $employee = $c->model('DM::Employee')->fetch(1);
"$c->model('DM')" merely returns the string "MyApp::DM", i.e., the name
of the DBIx::DataModel schema, but it also ensures that it is connected
to the database, as configured in the "connect_info" configuration
entry.
"$c->model('DM::Employee')" (or any other table declared in
MyApp::Schema) does the same (returns the string "MyApp::DM::Employee",
and connects to the database if need be).
DESCRIPTION
METHODS
new Constructor. It creates "ACCEPT_CONTEXT" for the "MyApp::Model::DM"
class and for pseudo-classes for each of its tables
("MyApp::Model::DM::Employee", "MyApp::Model::DM::Department", etc.)
This allows the Catalyst application to invoke
"$c->model('DM::Employee')" prior to calling "$c->model('DM')" and
still have it initialised properly.
The "ACCEPT_CONTEXT" methods invoke the connect_if_not() method
before returning the Schema class name or the Table class name:
$c->model('DM'); # "MyApp::DM"
$c->model('DM::Employee'); # "MyApp::DM::Employee"
The pseudo-classes names is elaborated as follow:
1 Take the class name as returned by the Schema's tables() method
("MyApp::DM::Employee").
2 Remove the Schema class name ("MyApp::DM::"), if possible,
which leaves "Employee".
3 Prepend with the Model class name ("MyApp::Model::DM::"),
resulting in "MyApp::Model::DM::Employee", which can be called
with "$c->model('DM::Employee')".
The Table class names need not be in the same namespace as the
Schema class: if the substitution at step 2 fails, the Model class
name is prepended to the full Table class name.
# In MyApp::Schema
DBIx::DataModel->Schema('MyApp::DM');
MyApp::Model->Table(qw/ Employee employee emp_id /);
# In MyApp::Model::DM
use base qw/ Catalyst::Model::DM /;
__PACKAGE__->config(
schema_class => 'MyApp::DM',
...
);
# In some controller code
$c->model('DM::Employee')->fetch(1); # Employee->fetch(1);
connect_if_not
Initialises the Schema (i.e., connects to the database), if not
already done. This method returns immediately if the Schema class
already has a dbh() (See DBIx::DataModel). If not, it creates a
database handler by invoking "DBI->connect" with the "connect_info"
parameters from the configuration.
This method receives $c and the Schema class name as arguments.
SEE ALSO
Catalyst::Manual, Catalyst::Helper::Model::DBIDM
AUTHOR
Cedric Bouvier, "<cbouvi at cpan.org>"
BUGS
Please report any bugs or feature requests to "bug-catalyst-model-dbidm
at rt.cpan.org", or through the web interface at
<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Catalyst-Model-DBIDM>. I
will be notified, and then you'll automatically be notified of progress
on your bug as I make changes.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Catalyst::Model::DBIDM
You can also look for information at:
* AnnoCPAN: Annotated CPAN documentation
<http://annocpan.org/dist/Catalyst-Model-DBIDM>
* CPAN Ratings
<http://cpanratings.perl.org/d/Catalyst-Model-DBIDM>
* RT: CPAN's request tracker
<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Catalyst-Model-DBIDM>
* Search CPAN
<http://search.cpan.org/dist/Catalyst-Model-DBIDM>
ACKNOWLEDGEMENTS
Praises go to Laurent Dami for writing DBIx::DataModel, and to Brandon L
Black, for writing Catalyst::Model::DBIC::Schema, a great source of
inspiration.
COPYRIGHT & LICENSE
Copyright 2007 Cedric Bouvier, all rights reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.