こないだ書いた Catalyst の DBIC モデルを外部スクリプトから利用するっていうやつ、DBIx::Class::Schema::Loader つかえばいいね。

use FindBin;
use lib "$FindBin::Bin/../lib";

{
    package MyApp::Model::DBIC;
    use base qw/DBIx::Class::Schema::Loader/;

    __PACKAGE__->load_from_connection(
        dsn => 'dbi:...',
    );
    __PACKAGE__->load_classes;
}

こんな感じにすれば、MyApp::Model::DBIC::* をロードしてくれる。

全部ロードしてもいいなら use MyApp; で終わりなんだけど多分ほとんどの場合外部スクリプトから必要なのはモデル部分だけだと思われる。

22:55: `load_classes` 書いてなかったので追記。ロードされてねーよ。
by typester / at 2006-02-06T04:41:00 / perl · dbic / Comment

find_or_new

sub find_or_new { my $class = shift; my $attr = @_ > 1 ? {@} : $[0]; my $exists = $class->find($attr); return defined $exists ? $exists : $class->new($attr); }

find_or_create はあるのにこれはないとか謎い。NOT NULL なカラムもってるテーブルだとあんまりつかえねーよ>find_or_create

by typester / at 2006-02-05T04:31:00 / perl · dbic / Comment

DBD::SQLite のバグ?

DBIC::Loader の blblack さんが綺麗なサンプルを返信してくれたのでそれを書くと、

my $test_ite = DBIC::Test->search;

while ( my $test = $test_ite->next ) { # Fails
###foreach my $test ($test_ite->all) { # Works
    $test->text( $test->text . ' updated' );
    $test->update;
}

とかで、イテレータでまわそうとするとupdate時に死ぬ。(searchで複数の行が帰ってくる場合)

配列で全部とってきてまわしたときは普通に動く。

ちなみに、DBIC::Test->search->all というのは CDBI でいうリストコンテキストでの search と同じことです。もちろん CDBI と同じように

my @tests = DBIC::Test->search;

ともかけるす。というか僕は最初そやって投稿したので、上の例が帰ってきたときにネイティブDBIC使いとの違いを知らしめられたという感じです。

by typester / at 2006-01-20T03:09:00 / perl · dbic / Comment

1 2 3 4 Next »

(Page 4 of 4)