ユーザ用ツール

サイト用ツール


catalyst:dbic

DBICによるモデル作成

DBIx::Classを Catalyst のモデルクラスとして使うことができる。DBIx::Classはデータアクセス機能しかないが、Catalyst上で利用する場合はモデルとしての機能が強化されており、データアクセスのロジックを直接スキーマクラスに記述することができる。

準備

まずはDBIx::Classをインストール

CatalystのDBIサポート関連クラスをCPANでインストール

  • Catalyst::Model::DBIC::Schema
  • Catalyst::Helper::Model::DBIC::Schema

適当なテーブルを作る。

CREATE TABLE books (
  id INTEGER NOT NULL AUTO_INCREMENT,
  isbn VARCHAR(13),
  title VARCHAR(255) NOT NULL,
  author VARCHAR(255),
  summary TEXT,
  PRIMARY KEY(id)
) CHARACTER SET utf8 TYPE=innoDB;
 
-- テスト用に適当なデータもセット
INSERT INTO books (isbn, title, author) VALUES ('0000000000000','Necronomicon','Abdul Alhazred');

DBIx::Classでモデルを作成

$ ./script/hoge_create.pl model DBIC DBIC::Schema Hoge::Schema create=dynamic dbi:mysql:databasename username password 

または

$ ./script/hoge_create.pl model DBIC DBIC::Schema Hoge::Schema create=static dbi:mysql:databasename username password 

意味は

model (モデル名) (親になるスキーマクラス) (作成するスキーマクラス) (スキーマクラスの生成方法) (DBIのデータベース接続設定)

create=staticとすると、データベースに接続してテーブル情報からスキーマクラスを作成してくれる。create=dynamicの場合はスキーマクラス作成を実行時に行う(DBIx::Class::Schema::Loaderを使う)。最近のフレームワーク(Rails、Django)のモデル生成は実行時生成が基本であり楽なので dynamic をお勧めする。

個人的にはモデル名はデータベース名にすると良いと思う、そうすると…

$c->model('データベース名::テーブル名')

となって何となく分かりやすい感じ。

以下のファイルができる

  • ${APP_ROOT}/lib/Hoge/Model/DBIC.pm
  • ${APP_ROOT}/lib/Hoge/Schema.pm

staticの場合はさらに

  • ${APP_ROOT}/lib/Hoge/Schema/Items.pm
  • ${APP_ROOT}/lib/Hoge/Schema/Categories.pm

などテーブルに対応するクラスが出来る。このSchema以下のクラスにはカラム定義、リレーション定義、インフレート設定、追加メソッドなどを記述できる。dynamicの場合はこれを実行時に作成する。dynamic生成の場合でリレーションやインフレート設定などを記述したい時は、これらのクラスを自分で作って設置する。このときでもカラム定義は書かなくていい。

コントローラ ${APP_ROOT}/lib/Hoge/Controller/Test.pm を修正

sub hello : Local {
    my ($self, $c) = @_;
    $c->stash->{hogehoge} = $c->model("DBIC::Books")->find(1)->title;
}

$c→modelの引数、

$c->model('モデル名::テーブルのスキーマクラス名')

あるいは

$c->model('モデル名')->resultset('テーブルのスキーマクラス名')

モデル名はモデルをヘルパースクリプトで作った時の名前に対応。テーブルのスキーマクラス名は、テーブル名に対応して決まる。テーブル名が hoge ならばクラス名は Hogehoge_fuga ならば HogeFuga になる。

サーバを起動してhttp://localhost:3000/test/helloへアクセス。Necronomiconと表示されたらめでたくモデルも出来ました。

catalyst/dbic.txt · 最終更新: 2010/01/10 13:49 by 127.0.0.1