CatalystでSchemaの変更、
つまりテーブル追加、カラム追加、データ型変更、カラム削除などするときは
前回紹介したScaffoldコマンドを実行すればOK!
—————————————
% script/【myappname】_create.pl model DBIC DBIC::Schema 【Myappname】::Schema create=static dbi:mysql:【db_name】 【db_username】 【db_password】
—————————————
リレーション関係をhas_many/belongs_toを用いて記述したものは
消されることなく更新されます。
なおSchemaファイルを編集するときは、以下の記述の下に加えていけばOK
# Created by DBIx::Class::Schema::Loader v0.07002 @ 2010-09-26 20:45:05
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:rNPNDpABaarkYRdPQ3kTwA
万が一、上に書いてしまっても
以下のようにアラートが出て上書きされることはない。親切!!
Dumping manual schema for Blog::Schema to directory /*********/Blog/script/../lib …
DBIx::Class::Schema::Loader::make_schema_at(): Checksum mismatch in ‘/*********/Blog/script/../lib/Blog/Schema/Result/Article.pm’, the auto-generated part of the file has been modified outside of this loader. Aborting.
If you want to overwrite these modifications, set the ‘overwrite_modifications’ loader option.
上記の方法を使わずに以下のコマンドでSchemaを出力できる。
※個人的には、こっちを採用しております
—————————————
% perl -MDBIx::Class::Schema::Loader=make_schema_at,dump_to_dir:./lib -e ‘make_schema_at “【Myappname】::Schema”, {relationships => 1, debug => 1}, ["dbi:mysql:【db_name】","【db_username】","【db_password】"]‘
—————————————
この場合も同様に、指定箇所以外に記述すると以下のようにエラーとなる。
DBIx::Class::Schema::Loader::make_schema_at(): Checksum mismatch in ‘./Blog/Schema/Result/Article.pm’, the auto-generated part of the file has been modified outside of this loader. Aborting.
If you want to overwrite these modifications, set the ‘overwrite_modifications’ loader option.
最後に、後者を使う場合にはModelのScaffoldコマンドは以下のようになる。
—————————————
% script/【myappname】_create.pl model DBIC DBIC::Schema 【Myappname】::Schema
—————————————
注意点としては、
Modelの設定ファイル(lib/【Myappname】/Model/DBIC.pm)は手動で設定。
最低限としては、schema_class => ‘【Myappname】::Schema’,の下に以下を追加。
~~~~~~~~~~~~~~~~~~~~~~~~~
connect_info => {
dsn => ‘dbi:mysql:【db_name】’,
user => ‘【db_username】’,
password => ‘【db_password】’,
}