View on
MetaCPAN is shutting down
For details read Perl NOC. After June 25th this page will redirect to
Brandon L Black > DBIx-Class-Schema-Loader-0.02007 > DBIx::Class::Schema::Loader



Annotate this POD


New  11
Open  10
View/Report Bugs
Module Version: 0.02007   Source   Latest Release: DBIx-Class-Schema-Loader-0.07049


DBIx::Class::Schema::Loader - Dynamic definition of a DBIx::Class::Schema


  package My::Schema;
  use base qw/DBIx::Class::Schema::Loader/;

  sub _monikerize {
      my $name = shift;
      $name = join '', map ucfirst, split /[\W_]+/, lc $name;

    connect_info            => [ "dbi:mysql:dbname",
                                 { AutoCommit => 1 },
    additional_classes      => [qw/DBIx::Class::Foo/],
    additional_base_classes => [qw/My::Stuff/],
    left_base_classes       => [qw/DBIx::Class::Bar/],
    components              => [qw/ResultSetManager/],
    resultset_components    => [qw/AlwaysRS/],
    constraint              => '^foo.*',
    relationships           => 1,
    options                 => { AutoCommit => 1 }, 
    inflect_map             => { child => 'children' },
    moniker_map             => \&_monikerize,
    debug                   => 1,

  # in seperate application code ...

  use My::Schema;

  my $schema1 = My::Schema->connect( $dsn, $user, $password, $attrs);
  # -or-
  my $schema1 = "My::Schema";
  # ^^ defaults to dsn/user/pass from load_from_connection()

  # Get a list of the original (database) names of the tables that
  #  were loaded
  my @tables = $schema1->loader->tables;

  # Get a hashref of table_name => 'TableName' table-to-moniker
  #   mappings.
  my $monikers = $schema1->loader->monikers;

  # Get a hashref of table_name => 'My::Schema::TableName'
  #   table-to-classname mappings.
  my $classes = $schema1->loader->classes;

  # Use the schema as per normal for DBIx::Class::Schema
  my $rs = $schema1->resultset($monikers->{foo_table})->search(...);


DBIx::Class::Schema::Loader automates the definition of a DBIx::Class::Schema by scanning table schemas and setting up columns and primary keys.

DBIx::Class::Schema::Loader supports MySQL, Postgres, SQLite and DB2. See DBIx::Class::Schema::Loader::Generic for more, and DBIx::Class::Schema::Loader::Writing for notes on writing your own db-specific subclass for an unsupported db.

This module requires DBIx::Class 0.05 or later, and obsoletes DBIx::Class::Loader for DBIx::Class version 0.05 and later.

While on the whole, the bare table definitions are fairly straightforward, relationship creation is somewhat heuristic, especially in the choosing of relationship types, join types, and relationship names. The relationships generated by this module will probably never be as well-defined as hand-generated ones. Because of this, over time a complex project will probably wish to migrate off of DBIx::Class::Schema::Loader.

It is designed more to get you up and running quickly against an existing database, or to be effective for simple situations, rather than to be what you use in the long term for a complex database/project.

That being said, transitioning your code from a Schema generated by this module to one that doesn't use this module should be straightforward and painless, so don't shy away from it just for fears of the transition down the road.



Example in Synopsis above demonstrates the available arguments. For detailed information on the arguments, see the DBIx::Class::Schema::Loader::Generic documentation.


This is an accessor in the generated Schema class for accessing the DBIx::Class::Schema::Loader::Generic -based loader object that was used during construction. See the DBIx::Class::Schema::Loader::Generic docs for more information on the available loader methods there.


Aside from relationship definitions being less than ideal in general, this version is known not to handle the case of multiple relationships between the same pair of tables. All of the relationship code will be overhauled on the way to 0.03, at which time that bug will be addressed.


Brandon Black,

Based on DBIx::Class::Loader by Sebastian Riedel

Based upon the work of IKEBE Tomohiro


Adam Anderson, Andy Grundman, Autrijus Tang, Dan Kubb, David Naughton, Randal Schwartz, Simon Flack and all the others who've helped.


This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.



syntax highlighting: