DBIx::Class::Schema - composable schemas
package My::Schema; use base qw/DBIx::Class::Schema/; # load My::Schema::Foo, My::Schema::Bar, My::Schema::Baz __PACKAGE__->load_classes(qw/Foo Bar Baz/); package My::Schema::Foo; use base qw/DBIx::Class/; __PACKAGE__->load_components(qw/PK::Auto::Pg Core/); # for example __PACKAGE__->table('foo'); my $schema1 = My::Schema->connect( $dsn, $user, $password, $attrs ); my $schema2 = My::Schema->connect( ... ); # fetch objects using My::Schema::Foo my $resultset = $schema1->resultset('Foo')->search( ... ); my @objects = $schema2->resultset('Foo')->search( ... );
Creates database classes based on a schema. This is the recommended way to use DBIx::Class and allows you to use more than one concurrent connection with your classes.
NB: If you're used to Class::DBI it's worth reading the "SYNOPSIS" carefully as DBIx::Class does things a little differently. Note in particular which module inherits off which.
Registers a class which isa ResultSourceProxy; equivalent to calling
$schema->register_source($moniker, $class->result_source_instance);
Registers the result source in the schema with the given moniker
my $class = $schema->class('Foo');
Retrieves the result class name for a given result source
my $source = $schema->source('Foo');
Returns the result source object for the registered name
my @source_monikers = $schema->sources;
Returns the source monikers of all source registrations on this schema
my $rs = $schema->resultset('Foo');
Returns the resultset for the registered moniker
Uses Module::Find to find all classes under the database class' namespace, or uses the classes you select. Then it loads the component (using use), and registers them (using register_class);
It is possible to comment out classes with a leading '#', but note that perl will think it's a mistake (trying to use a comment in a qw list) so you'll need to add "no warnings 'qw';" before your load_classes call.
This is the most important method in this class. it takes a target namespace, as well as dbh connection info, and creates a DBIx::Class::DB class as well as subclasses for each of your database classes in this namespace, using this connection.
It will also setup a ->class method on the target class, which lets you resolve database classes based on the schema component name, for example
MyApp::DB->class('Foo') # returns MyApp::DB::Foo, # which ISA MyApp::Schema::Foo
This is the recommended API for accessing Schema generated classes, and using it might give you instant advantages with future versions of DBIC.
WARNING: Loading components into Schema classes after compose_connection may not cause them to be seen by the classes in your target namespace due to the dispatch table approach used by Class::C3. If you do this you may find you need to call Class::C3->reinitialize() afterwards to get the behaviour you expect.
Sets up a database connection class to inject between the schema and the subclasses the schema creates.
Instantiates a new Storage object of type storage_type and passes the arguments to $storage->connect_info. Sets the connection in-place on the schema.
Conveneience method, equivalent to $schema->clone->connection(@info)
Clones the schema and its associated result_source objects and returns the copy.
Populates the source registered with the given moniker with the supplied data. @data should be a list of listrefs, the first containing column names, the second matching values - i.e.
$schema->populate('Foo', [ [ qw/foo_id foo_string/ ], [ 1, 'One' ], [ 2, 'Two' ], ... ]);
Defaults to using Carp::Clan to report errors from user perspective.
Matt S. Trout <mst@shadowcatsystems.co.uk>
You may distribute this code under the same terms as Perl itself.
2 POD Errors
The following errors were encountered while parsing the POD:
'=item' outside of any '=over'
You forgot a '=back' before '=head1'
To install DBIx::Class, copy and paste the appropriate command in to your terminal.
cpanm
cpanm DBIx::Class
CPAN shell
perl -MCPAN -e shell install DBIx::Class
For more information on module installation, please visit the detailed CPAN module installation guide.