DBIx::Class::Schema::Loaderのクラスをカスタマイズする
人のデータを表すテーブルがあるとする。
CREATE TABLE person ( id integer PRIMARY KEY, first_name text, last_name text );
first_nameとlast_nameをつなげた full_name という仮想的な列があると便利。
package TestDB; use base qw/DBIx::Class::Schema::Loader/; __PACKAGE__->loader_options(); 1; package main; my $db_schema = TestDB->connect("dbi:Pg:dbname=testdb2","","",undef); my $row = $db_schema->resultset('Person')->first; print $row->full_name, "\n";
@INC に設定してあるディレクトリの下に、ディレクトリとDIBx::Class::Schema::Loaderで生成されるクラスをカスタマイズするためのファイルをつくる。
mkdir TestDB vi TestDB/Person.pm
Person.pmの中身。full_nameメソッドが追加されている。
package TestDB::Person; sub full_name { my $self = shift; return $self->first_name . " " . $self->last_name; } 1;
「仮想的な列」なので、first_nameだけを取得してしまうとやっぱりfirst_nameの分しか表示されない。
my $row2 = $db_schema->resultset('Person')->search(undef, { columns => ['first_name'] } )->first; print $row->full_name, "\n";