• 追加された行はこの色です。
  • 削除された行はこの色です。
* Schemaクラス - DBIx::Class::Schema::Loader[#r5d1f8a7]
* スキーマクラス・テーブルクラスの作成 [#o5a56f88]

** Schemaクラスファイルの自動生成 [#w1fb1e6b]
ワンラインスクリプトで、DBIx::Class::Schema::Loaderを使って、実際のDBをパースし自動的にスキーマクラス・テーブルクラスを作る。

MySQLのmydbデータベースに接続して、libディレクトリ以下にMyDB::Schemaという名前空間でSchemaクラスを作成してくれる。
以下の場合、MySQLのmydbデータベースに接続して、libディレクトリ以下にMyDB::Schemaという名前空間でスキーマクラス・テーブルクラスを作成する。
 perl -MDBIx::Class::Schema::Loader=make_schema_at,dump_to_dir:./lib \
 -e 'make_schema_at "MyDB::Schema", {relationships => 1, debug => 1}, ["dbi:mysql:mydb","db_user","db_passwd"]'
*** ファイル構成 [#gebedbea]
  - lib
    `-- MyDB
        |-- Schema
        |   |-- TableA.pm # テーブルAのDBIx::Classクラス
        |   `-- TableB.pm # テーブルBのDBIx::Classクラス
        `-- Schema.pm # DBIx::Class::Schemaクラス

** DBIx::Class::Schema::Loaderを継承して [#gcef247b]

全テーブル分のSchemaクラス。
** テーブルごとのDBIx::Classクラスは作らず、Schema::Loaderクラスだけで対応する場合 [#m64b2c7d]
以下のようなスキーマクラスを作る。(が、上の方法でテーブルクラスを作成した方がよいだろう。)
 package MyDB;
 
 use base qw/DBIx::Class::Schema::Loader/;
 
 __PACKAGE__->loader_options();
 
 1;

そのShecmaクラスを利用するスクリプト。
 use MyDB;
 
 my $db = DB->connect('dbi:Pg:dbname=mydb','dbuser','dbpasswd');
 my $rs = $db->resultset('Users');
 my @rows = $rs->search;
 foreach (@rows) {
     print $_->id,$_->name,"\n";
 }


** 参考 [#ef5957c4]
http://search.cpan.org/~blblack/DBIx-Class-Schema-Loader-0.04002/lib/DBIx/Class/Schema/Loader.pm
http://search.cpan.org/perldoc?DBIx::Class::Schema::Loader


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS