FC2ブログ
2010
11.26

myapp_create.pl で DBスキーマを作る時に コンポーネントを指定する。

Category: perl   Tags:perlDBIxCatalyst
ぐるぐるして perldoc にあることに気づく・・・

あいかわらずアホさを露呈しておりますが・・・。

Catalyst で Schema (作る|作り直す)時ももちろん、DBIx::Class::Schema::Loader 使ってやるわけですが、

use strict;
use DBIx::Class::Schema::Loader qw/make_schema_at/;

make_schema_at(
'MyApp::Schema',
{ components => [ qw/ UTF8Columns InflateColumn::DateTime PK::Auto / ],
dump_directory => 'DirName',
really_erase_my_files => 1,
relationships => 1,
debug => 1,
},
['dbi:mysql:myapp','username' , 'password'],
);


たぶんこんな感じで実行されてます。
だけど、さくっと見た感じだと、components 等をどう指定していいのかわからなかったのでメモです。
というか、Catalystのどこで実行されてるのかがよくわからなかったので、ぐるぐるするハメに。

perl script/myapp_create.pl model myApp DBIC::Schema MyApp::Schema \
create=static components=UTF8Columns \
dbi:mysql:dbname:hostname:3306 username password

componentsを複数指定する場合は、カンマで区切ります。

components='UTF8Columns PK::Auto'

とか書いちゃいけません。

あと、データソースの情報は最後のオプションにしないとエラーになります。

perl script/myapp_create.pl model myApp DBIC::Schema MyApp::Schema \
dbi:mysql:dbname:hostname:3306 username password \
create=static components=UTF8Columns

はダメってことです。


see: Catalyst::Helper::Model::DBIC::Schema




スポンサーサイト



Comment:0  Trackback:0
2009
05.26

populate ではまったのを思い出した

Category: perl   Tags:perlDBIx
そういえば、前にはまったのを思い出したのでメモ

changelog

0.07999_04 2007-06-01 14:04:00
- moved populate to resultset



これより前のバージョンは、Schema.pm あたりに populate があったはず

$ResultSet->populate(\@hoge) とかしてると、DBIx のバージョンが古いと失敗します。
まぁ新しくしろってことですn
Comment:0  Trackback:0
2008
12.04

脳汁でちゃうよ?

そんなわけで、某検索サイトをちまちまと DBIx 化中。
一度にやるほどまとまった時間もないので、今は、DBIDBIx が同居中。
しばらくしたら、DBIx だけになるでしょう。
view もちまちまと作成中。
時々うまくできなくて悶絶中。アアン。


ついでに、やっと某検索サイトのソースを svn に突っ込んだ…。
$ svnadmin create /var/svn/ほげほげ
#よくわすれるからメモ。
して、元のをimport して、作業ディレクトリ作って、そこで co。


頭悪いことしてて、use lib を 全部の .cgi の頭のとこでしてるので、
ディレクトリ変えたくないし、色々 symlink。
これは、ちゃんとコントローラ作ってやりたいが、まぁ次の時かな。

前後は省略するけど、

my @link = $i->{dbix}->resultset('Recent')->search(undef,{order_by=>['u desc'] , rows=>50});


こんな風にかけてしまうのが、まったくもって楽すぎる!

今までだと

my $sql = "select * from recent order by u desc limit 50";
$i->{dbh}->prepare($sql);
$sth->execute();
my @item = $sth->fetchall_arrayref({id=>1,name=>1});


# いや、まぁ、もうちょっとマシには書けるけど、面倒だったから、sql そのまま書いてたんだ。
とか、だらだらやってた。



もう戻れない。





みんなもっとつかえお!





create 時って、まとめてデータ渡せたりせんのかなぁ、、

hash 作って、配列つっこんで、

$rs->create(@data);


とかしたら怒られた。
仕方ないので、

map{$rs->create($_);}@data;


とかしてるけど、なんかありそう。。
# エラー出たらどうするつもりなんだ自分…。

Comment:2  Trackback:0
back-to-top