Let's look at how you can set and use your first native L<DBIx::Class> tree.
First we'll see how you can set up your classes yourself. If you want them to
-be auto-discovered, just skip to the next section, which shows you how to use
+be auto-discovered, just skip to the L<next section|/Using
+DBIx::Class::Schema::Loader>, which shows you how to use
L<DBIx::Class::Schema::Loader>.
=head2 Setting it up manually
__PACKAGE__->position_column('rank');
Ordered will refer to a field called 'position' unless otherwise directed. Here you are defining
-the ordering field to be named 'rank'. (NOTE: Insert errors may occur if you use the Ordered
+the ordering field to be named 'rank'. (NOTE: Insert errors may occur if you use the Ordered
component, but have not defined a position column or have a 'position' field in your row.)
Set the table for your class:
size => 16,
is_nullable => 0,
is_auto_increment => 1,
- default_value => '',
},
artist =>
{ data_type => 'integer',
size => 16,
is_nullable => 0,
- is_auto_increment => 0,
- default_value => '',
},
title =>
{ data_type => 'varchar',
size => 256,
is_nullable => 0,
- is_auto_increment => 0,
- default_value => '',
},
rank =>
{ data_type => 'integer',
size => 16,
is_nullable => 0,
- is_auto_increment => 0,
- default_value => '',
+ default_value => 0,
}
);
DBIx::Class doesn't directly use most of this data yet, but various related
-modules such as L<DBIx::Class::WebForm> make use of it. Also it allows you to
-create your database tables from your Schema, instead of the other way around.
+modules such as L<HTML::FormHandler::Model::DBIC> make use of it.
+Also it allows you to create your database tables from your Schema,
+instead of the other way around.
See L<DBIx::Class::Schema/deploy> for details.
See L<DBIx::Class::ResultSource> for more details of the possible column
See L<DBIx::Class::Relationship> for more information about the various types of
available relationships and how you can design your own.
-=head2 Using L<DBIx::Class::Schema::Loader>
+=head2 Using DBIx::Class::Schema::Loader
-This is an external module, and not part of the L<DBIx::Class> distribution.
-It inspects your database, and automatically creates classes for all the tables
-in your database.
+This module (L<DBIx::Class::Schema::Loader>) is an external module, and not part
+of the L<DBIx::Class> distribution. It inspects your database, and automatically
+creates classes for all the tables in your schema.
The simplest way to use it is via the L<dbicdump> script from the
L<DBIx::Class::Schema::Loader> distribution. For example:
- $ dbicdump -o dump_directory=./lib MyApp::Schema dbi:mysql:mydb user pass
+ $ dbicdump -o dump_directory=./lib \
+ -o components='["InflateColumn::DateTime"]' \
+ MyApp::Schema dbi:mysql:mydb user pass
If you have a mixed-case database, use the C<preserve_case> option, e.g.:
- $ dbicdump -o dump_directory=./lib -o preserve_case=1 MyApp::Schema \
- dbi:mysql:mydb user pass
+ $ dbicdump -o dump_directory=./lib -o preserve_case=1 \
+ -o components='["InflateColumn::DateTime"]' \
+ MyApp::Schema dbi:mysql:mydb user pass
If you are using L<Catalyst>, then you can use the helper that comes with
L<Catalyst::Model::DBIC::Schema>:
my @albums = My::Schema->resultset('Album')->search(
{ artist => 'Bob Marley' },
- { rows => 2, order_by => 'year DESC' }
+ { rows => 2, order_by => { -desc => 'year' } }
);
C<@albums> then holds the two most recent Bob Marley albums.
on all your result sources B<even if the underlying RDBMS does not have one>.
In a pinch one can always declare each row identifiable by all its columns:
- __PACKAGE__->set_primary_keys (__PACKAGE__->columns);
+ __PACKAGE__->set_primary_key(__PACKAGE__->columns);
Note that DBIx::Class is smart enough to store a copy of the PK values before
any row-object changes take place, so even if you change the values of PK