ResultSetじゃなくて、配列やハッシュで取得するコンボネント
追記
名前変更してcodereposに上げてみました。
http://svn.coderepos.org/share/lang/perl/DBIx-Class-AsArrayHash/
独自にキャッシュしたいときや、viewがオブジェクトをサポートしてない時とかに必要にかられる。
コンポネント DBIx::Class::ResultSetX
package DBIx::Class::ResultSetX; use strict; use warnings; use base qw( DBIx::Class ); __PACKAGE__->load_components(qw/ResultSetManager/); sub searchX : ResultSet { my $self = shift; my $cond = shift || {}; my $args = shift || {}; my $obj = $self->search( $cond , $args ) ; my @results = (); while( my $item = $obj->next ) { my %hash = $item->get_columns; push @results , \%hash ; } return \@results; } sub singleX : ResultSet { my ( $self , $cond , $args ) = @_; my $obj = $self->single( $cond , $args ) ; return unless $obj; my %hash = $obj->get_columns; return \%hash; } 1;
読み込み
package Your::Schema::Foo; use strict; use warnings; use base 'DBIx::Class'; # 順番に注意。Coreの前に呼ぶ必要がある。 __PACKAGE__->load_components(qw/ResultSetX Core/); # 以下スキーマコードコード省略 1;
使い方
こんな感じ。基本、search() , single() と使い方同じで、取得するデータがオブジェクトではなく、配列、ハッシュなだけ。
my $tasks = $c->model('DB::Foo')->searchX( { status => 1} ); my $task = $c->model('DB::Foo')->single( { id => 3 } );
作らないでもある気がするんだけど、cpanでは見つけれなかった >_< ご存知の方教えてください。