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