[Catalyst-commits] r12468 - in Catalyst-Model-DBIC-Schema/trunk: .
lib/Catalyst/Model/DBIC
caelum at dev.catalyst.perl.org
caelum at dev.catalyst.perl.org
Wed Dec 23 06:23:20 GMT 2009
Author: caelum
Date: 2009-12-23 06:23:19 +0000 (Wed, 23 Dec 2009)
New Revision: 12468
Modified:
Catalyst-Model-DBIC-Schema/trunk/Changes
Catalyst-Model-DBIC-Schema/trunk/lib/Catalyst/Model/DBIC/Schema.pm
Log:
pod cleanup, release
Modified: Catalyst-Model-DBIC-Schema/trunk/Changes
===================================================================
--- Catalyst-Model-DBIC-Schema/trunk/Changes 2009-12-23 00:31:51 UTC (rev 12467)
+++ Catalyst-Model-DBIC-Schema/trunk/Changes 2009-12-23 06:23:19 UTC (rev 12468)
@@ -1,6 +1,6 @@
Revision history for Perl extension Catalyst::Model::DBIC::Schema
-0.32 Mon Dec 21 21:33:53 EST 2009
+0.32 Wed Dec 23 01:22:06 EST 2009
- Move documentation on setting up authentication into its own section
for clarity.
- Other misc documentation enhancements to make the docs more clear
Modified: Catalyst-Model-DBIC-Schema/trunk/lib/Catalyst/Model/DBIC/Schema.pm
===================================================================
--- Catalyst-Model-DBIC-Schema/trunk/lib/Catalyst/Model/DBIC/Schema.pm 2009-12-23 00:31:51 UTC (rev 12467)
+++ Catalyst-Model-DBIC-Schema/trunk/lib/Catalyst/Model/DBIC/Schema.pm 2009-12-23 06:23:19 UTC (rev 12468)
@@ -24,61 +24,43 @@
=head1 SYNOPSIS
-=over 4
+First, prepare your database schema using L<DBIx::Class>, see
+L<Catalyst::Helper::Model::DBIC::Schema> for how to generate a
+L<DBIx::Class::Schema> from your database using the Helper script, and
+L<DBIx::Class::Schema::Loader::Base>.
-=item 1.
+A typical usage of the helper script would be:
-First, prepare your database schema using C<DBIx::Class>.
+ script/myapp_create.pl model FilmDB DBIC::Schema MyApp::Schema::FilmDB \
+ create=static dbi:mysql:filmdb dbusername dbpass \
+ quote_char='`' name_sep='.'
-(If you're not sure how to do this, then read L<DBIx::Class::Manual::Intro> first!)
+If you are unfamiliar with L<DBIx::Class>, see L<DBIx::Class::Manual::Intro>
+first.
-This example assumes that you already have a schema called
-C<MyApp::Schema::FilmDB>,
-which defines some tables in C<MyApp::Schema::FilmDB::Actor> and
-C<MyApp::Schema::FilmDB::Film>.
+These examples assume that you already have a schema called
+C<MyApp::Schema::FilmDB>, which defines some Result classes for tables in
+C<MyApp::Schema::FilmDB::Result::Actor> and
+C<MyApp::Schema::FilmDB::Result::Film>. Either created by the helper script (as
+shown above) or manually.
-=item 2.
+The helper also creates a Model in C<lib/MyApp/Model/FilmDB.pm>, if you already
+have a schema you can create just the Model using:
-Now, to expose it to Catalyst as a model, you should create a DBIC Model in
-MyApp/Model/FilmDB.pm:
+ script/myapp_create.pl model FilmDB DBIC::Schema MyApp::Schema::FilmDB
+ dbi:mysql:filmdb dbusername dbpass
-=over 8
+The connect_info is optional and will be hardcoded into the Model if provided.
+It's better to configure it in your L<Catalyst> config file, which will also
+override any hardcoded config, see L</connect_info> for examples.
-You can do this:
-
-=item * With the helper script
-
- script/create.pl model FilmDB DBIC::Schema MyApp::Schema::FilmDB ...options...
-
-See L<Catalyst::Helper::Model::DBIC::Schema> for details.
-
-=item * Manually
-
- package MyApp::Model::FilmDB;
- use base qw/Catalyst::Model::DBIC::Schema/;
-
- __PACKAGE__->config(
- schema_class => 'MyApp::Schema::FilmDB',
- connect_info => {
- dsn => "DBI:...",
- user => "username",
- password => "password",
- }
- );
-
-See below for a full list of the possible config parameters.
-
-=back
-
-=back
-
Now you have a working Model which accesses your separate DBIC Schema. This can
be used/accessed in the normal Catalyst manner, via C<< $c->model() >>:
my $db_model = $c->model('FilmDB'); # a Catalyst::Model
my $dbic = $c->model('FilmDB')->schema; # the actual DBIC object
-The Model proxies the DBIC instance so you can do
+The Model proxies to the C<Schema> instance so you can do:
my $rs = $db_model->resultset('Actor'); # ... or ...
my $rs = $dbic ->resultset('Actor'); # same!
@@ -88,10 +70,18 @@
my $rs = $c->model('FilmDB::Actor');
-To find out more about which methods can be called on a ResultSet, or how to
-add your own methods to it, please see the ResultSet documentation in the
-L<DBIx::Class> distribution.
+See L<DBIx::Class::ResultSet> to find out more about which methods can be
+called on ResultSets.
+You can also define your own ResultSet methods to encapsulate the
+database/business logic of your applications. These go into, for example,
+C<lib/MyApp/Schema/FilmDB/ResultSet/Actor.pm>. The class must inherit from
+L<DBIx::Class::ResultSet> and is automatically loaded.
+
+Then call your methods like any other L<DBIx::Class::ResultSet> method:
+
+ $c->model('FilmDB::Actor')->SAG_members
+
=head2 Some examples:
# to access schema methods directly:
@@ -130,11 +120,11 @@
the documentation for L<Catalyst::Helper::Model::DBIC::Schema> for
information on generating these Models via Helper scripts.
-When your Catalyst app starts up, a thin Model layer is created as an
-interface to your DBIC Schema. It should be clearly noted that the model
-object returned by C<< $c->model('FilmDB') >> is NOT itself a DBIC schema or
-resultset object, but merely a wrapper proving L<methods|/METHODS> to access
-the underlying schema.
+When your Catalyst app starts up, a thin Model layer is created as an interface
+to your DBIC Schema. It should be clearly noted that the model object returned
+by C<< $c->model('FilmDB') >> is NOT itself a DBIC schema or resultset object,
+but merely a wrapper proving L<methods|/METHODS> to access the underlying
+schema (but also proxies other methods to the underlying schema.)
In addition to this model class, a shortcut class is generated for each
source in the schema, allowing easy and direct access to a resultset of the
@@ -164,9 +154,16 @@
In order to add methods to a DBIC resultset, you cannot simply add them to
the source (row, table) definition class; you must define a separate custom
-resultset class. See L<DBIx::Class::Manual::Cookbook/"Predefined searches">
-for more info.
+resultset class. This is just a matter of making a
+C<lib/MyApp/Schema/ResultSet/Actor.pm> class that inherits from
+L<DBIx::Class::ResultSet>, if you are using
+L<DBIx::Class::Schema/load_namespaces>, the default for helper script generated
+schemas.
+See L<DBIx::Class::Manual::Cookbook/"Predefined searches">
+for information on definining your own L<DBIx::Class::ResultSet> classes for
+use with L<DBIx::Class::Schema/load_classes>, the old default.
+
=head1 CONFIG PARAMETERS
Any options in your config not listed here are passed to your schema.
@@ -465,13 +462,15 @@
$self->composed_schema($schema_class->compose_namespace($class));
+ my $was_mutable = $self->meta->is_mutable;
+
$self->meta->make_mutable;
$self->meta->add_attribute('schema',
is => 'rw',
isa => 'DBIx::Class::Schema',
handles => $self->_delegates
);
- $self->meta->make_immutable;
+ $self->meta->make_immutable unless $was_mutable;
$self->schema($self->composed_schema->clone);
@@ -623,8 +622,9 @@
=item CMDS_NO_SOURCES
-Set this variable if you will be using schemas with no sources (tables) to
-disable the warning. The warning is there because this is usually a mistake.
+Set this variable if you will be using schemas with no sources (Result classes)
+to disable the warning. The warning is there because having no Result classes
+is usually a mistake.
=back
@@ -674,7 +674,8 @@
Traits:
L<Catalyst::TraitFor::Model::DBIC::Schema::Caching>,
-L<Catalyst::TraitFor::Model::DBIC::Schema::Replicated>
+L<Catalyst::TraitFor::Model::DBIC::Schema::Replicated>,
+L<Catalyst::TraitFor::Model::DBIC::Schema::QueryLog>
=head1 AUTHOR
@@ -692,7 +693,7 @@
osfameron: C<osfameron at cpan.org>
-Ozum Eldogan C<ozum at ozum.net>
+ozum: Ozum Eldogan C<ozum at ozum.net>
=head1 COPYRIGHT
More information about the Catalyst-commits
mailing list