Catalyst::Model::JDBI::Schemas 0.01

CatalystとJifty::DBIを使うモジュールとしてはすでにCatalyst::Model::Jifty::DBIというのが存在していて、実際に試された方もいるようなのですが、これ、どう考えてもつくった本人は使ってないよねというネタモジュールなので、自分用にでっちあげたものをアップしました。

注意:Catalyst::Model::JDBI::Schemasは0.03以降Catalyst::Model::Jifty::DBI名前空間に移動しました。本文中必要な部分については書き換えておきましたが、Catalyst::Model::JDBI::SchemasはDEPRECATEDになっていますのでご注意ください。

具体的な使い方はPODと、同梱してあるテスト、あとは先だってShibuya.pmで紹介したスライドを見ればだいたいわかると思いますが、英語はいやだという方のためにいくつかポイントを書いておきますと、

$c->model('JDBI::Foo(Collection)')は「新規レコード(コレクション)」です

DBICの場合 $c->model('DBIC::Foo')->find などの結果がレコード(セット)になりますが、JDBIの場合は $c->model('JDBI::Foo')がレコード、$c->model('JDBI::FooCollection')がコレクション(レコードセット)なので、DBICのつもりで $c->model('JDBI::Foo(Collection)')のあとにメソッドチェーンを続けていくと期待したものとは違うものが返ってくる可能性が高いです。

むだにパーティショニングができたりします

むずかしいことは一切していないのでシビアな環境でどのくらい使えるかは謎ですが、同じスキーマを使い回せるデータベースについてはモデルひとつで全部対応できるようにしてあります。

ヘルパーは、それらしい親がなければモデルクラスを、それらしい親がいればスキーマ(レコード/コレクション)を作成します

正直なところ私はCatalystのヘルパーを使わないのでいまいち微妙な挙動ですが、

  script/app_create.pl model (モデル名) Jifty::DBI

で、(アプリ名)::Model::(モデル名)という形のモデルのひな形が、

  script/app_create.pl model (モデル名)::(テーブル名) Jifty::DBI

で、テーブル(レコード)のスキーマ定義をするクラスと、それに対応するコレクションクラスのひな形ができます。

どうしてもということであれば

  script/app_create.pl model (モデル名) Jifty::DBI (スキーマの親クラス) (接続情報)

というDBIC用のヘルパーのようなこともできるようにはしてありますが、この辺はYAMLの方に書いた方がなにかと便利でしょう。

ともあれ、例によってCodeReposにも入れてありますので、CatalystでJifty::DBIを使ってみたいという方はぜひ一度お試しあれ。