DBICで簡単map
http://d.hatena.ne.jp/naoya/20080419/1208579525
naoyaさんのをふと思い出してDBICでの出来るように書いてみた次第。
DBIx::MoCoの場合とは異なりDBICの場合は、
searchメソッドから戻ってくるものはスカラーコンテキストではResultSetなので
無理矢理DBIC::ResultSetにmapメソッドを生やしてみた。
package DBIx::Class::RowCollection; use strict; use warnings; use base 'DBIx::Class'; our $VERSION = '0.01'; { use DBIx::Class::ResultSet; package DBIx::Class::ResultSet; use Params::Validate qw/:all/; use strict; use warnings; sub map { my ($self, $code) = validate_pos(@_, 1, { type => CODEREF }); my @maped = CORE::map &$code, $self->all; return wantarray ? @maped : \@maped; } } =head1 NAME DBIx::Class::RowCollection - DBIC row collection =head1 SYNOPSIS package CollectionTest::User; use strict; use warnings; use base 'DBIx::Class'; __PACKAGE__->load_components(qw/RowCollection Core/); in your script: my @user_names = $schema->resultset('User')->search->map(sub { $_->name }); my @users = $schema->resultset('User')->search->map(sub { +{$_->get_columns } }); =head1 DESCRIPTION A can be easily called "map".
普通だと
map { $_->name } $rs->all;
と、いった感じで書いてましたが
$rs->map(sub { $_->name } );
と、書けてより直感的かなとおもうます。
mapメソッド内に書くsubがちょっとよけいかな。