DBIx::Skinny

| | Save This Page to del.icio.us このエントリーを含むはてなブックマーク

DBIx::Skinny (0.0727) がおもしろそうだったので触ってみています。

概ねやりたいことが出来るようになって来ましたが、
若干困ったところがあったので書いておきます。

DBIx::Skinny::Schema::Loader (v0.17) を使ってスキーマを動的生成すると、
DBIx::Skinny::Schema::Loader::DBI の table_pk メソッドがプライマリキーを
配列リファレンスで設定するようになっています。
(たぶん v0.13 から)

しかし DBIx::Skinny の insert が呼んでいる_insert_or_replace メソッドでは、
(ref $pk) eq 'ARRAY' の場合に、$dbd->last_insert_id を設定してくれないよう
です。

そのため、インサートして戻ってくれる行オブジェクトが id を持っていない
状態になってしまいます。この場合 id というアクセサメソッドも作られない
ので、以下のコードはエラーになります。

my $row = $db->insert('user', { hash => '' });
$row->update({ hash => $self->make_hash($row->id) });

DBIx::Skinny::Schema::Loader を使わずに静的にスキーマを書いて、
プライマリキーをスカラーで設定しておけば問題ないので、どちらか
と言えば DBIx::Skinny::Schema::Loader の問題な気がしますが、
table_pk が配列リファレンスを返すようになってから随分経っているので、
私の使い方が悪いのかも知れません。

という訳で 困っております。

DBIx::Skinny::Schema::Loader 使わなければ困らないのですが、
スキーマを手で書きたくないので...

TRACKBACK

このブログ記事を参照しているブログ一覧: DBIx::Skinny

このブログ記事に対するトラックバックURL: http://blog.s2factory.co.jp/MT/mt-tb.cgi/152