DBIx::Class::Manual::Intro #1

http://search.cpan.org/~bricas/DBIx-Class-0.07003/lib/DBIx/Class/Manual/Intro.podの抜き出しメモ.まずスキーマの作成まで

データベースからの情報が絶対に必要になるまでqueryされない.ResultSetするだけではqueryしないよ

ベースとなるschemaクラス

自動でDB用classを設定するにはDBIx::Class::Schema::Loaderを使う

#まず宣言・継承
package My::Schema;
use base qw/DBIx::Class::Schema/;

#実際にどのSchemaを読み込むか設定.ここではAlbum,Artist
# load My::Schema::Album and My::Schema::Artist
__PACKAGE__->load_classes(qw/ Album Artist /);

#複数の名前空間で呼び出したい場合はこのように書く
# load My::Schema::Album, My::Schema::Artist and My::OtherSchema::LinerNotes
__PACKAGE__->load_classes(
  {
    'My::Schema' => [qw/ Album Artist /],
    'My::OtherSchema' => [qw/ LinerNotes /]
  }
);

#自動でクラスをすべて読み込むなら何も指定しない
# load My::Schema::*
__PACKAGE__->load_classes();

1;

各々のSchemaクラス

#宣言・継承
package My::Schema::Album;
use base qw/DBIx::Class/;

#ロードするコンポーネントの指定
#PK::Autoはオートインクリメント
__PACKAGE__->load_components(qw/ PK::Auto Core /);

#テーブル名を指定
__PACKAGE__->table('album');

#カラム名を指定
__PACKAGE__->add_columns(qw/ albumid artist title /);

#カラム名の指定の際に詳細を指定することもできる
#DBICではあまり直接は使ってないけど,
#DBIx::Class::WebForm とかでは使ってる(らしい)
#設定の方法はDBIx::Class::ResultSourceを見てね
#http://search.cpan.org/~bricas/DBIx-Class-0.07003/lib/DBIx/Class/ResultSource.pm
__PACKAGE__->add_columns(
               albumid =>
                 { accessor  => 'album',
                   data_type => 'integer',
                   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 => '',
                 }
);

#プライマリキィの設定
__PACKAGE__->set_primary_key('albumid');

#複数プライマリキィがあったらリストで
__PACKAGE__->set_primary_key( qw/ albumid artistid / );

# リレーションの設定もしてね
# http://search.cpan.org/~bricas/DBIx-Class-0.07003/lib/DBIx/Class/Relationship.pm
__PACKAGE__->has_many('albums', 'My::Schema::Artist', 'album_id');
1;

http://search.cpan.org/~bricas/DBIx-Class-0.07003/lib/DBIx/Class/ResultSource.pm
http://search.cpan.org/~bricas/DBIx-Class-0.07003/lib/DBIx/Class/Relationship.pm

DBIx::Class::Schema::Loaderを使うなら

簡単〜

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

__PACKAGE__->loader_options( relationships => 1 );

1;

もっと詳しく!→http://search.cpan.org/~blblack/DBIx-Class-Schema-Loader-0.03009/lib/DBIx/Class/Schema/Loader.pm