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.

