内容へ移動
Cat Paw Software
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
トレース:
catalyst:dbic
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== DBICによるモデル作成 ====== [[:perl:dbic|DBIx::Class]]を Catalyst のモデルクラスとして使うことができる。DBIx::Classはデータアクセス機能しかないが、Catalyst上で利用する場合はモデルとしての機能が強化されており、データアクセスのロジックを直接スキーマクラスに記述することができる。 ===== 準備 ===== まずはDBIx::Classをインストール * [[:perl:dbic#インストール]] CatalystのDBIサポート関連クラスをCPANでインストール * Catalyst::Model::DBIC::Schema * Catalyst::Helper::Model::DBIC::Schema 適当なテーブルを作る。 <code sql> 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'); </code> 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 を修正 <code perl> sub hello : Local { my ($self, $c) = @_; $c->stash->{hogehoge} = $c->model("DBIC::Books")->find(1)->title; } </code> ''$c->model''の引数、 $c->model('モデル名::テーブルのスキーマクラス名') あるいは $c->model('モデル名')->resultset('テーブルのスキーマクラス名') モデル名はモデルをヘルパースクリプトで作った時の名前に対応。テーブルのスキーマクラス名は、テーブル名に対応して決まる。テーブル名が ''hoge'' ならばクラス名は ''Hoge''、''hoge_fuga'' ならば ''HogeFuga'' になる。 サーバを起動してhttp://localhost:3000/test/helloへアクセス。Necronomiconと表示されたらめでたくモデルも出来ました。
catalyst/dbic.txt
· 最終更新:
2010/01/10 13:49
by
127.0.0.1
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ