DBIx::Class::Helper::Row::ProxyResultSetMethod(3pm)

DBIx::Class::Helper::Row::ProxyResultSetMethod3pm

Efficiently reuse resultset methods from results with fallback

Usage

ResultSet:

 package MyApp::Schema::ResultSet::Foo;
 use parent 'DBIx::Class::ResultSet';
 __PACKAGE__->load_components(qw(
    Helper::ResultSet::CorrelateRelationship
 ));
 ...;
 sub with_friend_count {
    shift->search(undef, {
       '+columns' => {
          'friend_count' => $self->correlate('friends')->count_rs->as_query,
       },
    })
 }

Result:

 package MyApp::Schema::Result::Foo;
 use parent 'DBIx::Class::Core';
 __PACKAGE__->load_components(qw( Helper::Row::ProxyResultSetMethod ));
 __PACKAGE__->proxy_resultset_method('friend_count');

or with DBIx::Class::Candy:

 package MyApp::Schema::Result::Foo;
 use DBIx::Class::Candy -components => ['Helper::Row::ProxyResultSetMethod'];
 proxy_resultset_method 'friend_count';

Elsewhere:

 my $row = $foo_rs->first;
 say $row->friend_count . ' friends';

Overview

This module makes reusing resultset methods from a result trivially easy. You should be using it.

Methods

proxy_resultset_method

 __PACKAGE__->proxy_resultset_method( $name => {
    slot             => $slot,
    resultset_method => $rs_method
 });

"proxy_resultset_method"'s first argument is the name of the method to generate and is required. The other two arguments, $slot, and $resultset_method are optional. If unspecified $slot will default to $name and $resultset_method will default to "with_$name". $slot is the column that the data being retrieved is stored as in the ResultSet method being proxied to. $resultset_method is (duh) the ResultSet method being proxied to.

If you did not call the "with_*" method on your ResultSet, and call the proxy method, it will transparently fallback and do the call and fetch the needed data. E.g.:

 my $foo = $schema->resultset('Foo')->first; ## did not call with_friend_count
 print $foo->friend_count; ## will produce desired result magically

Candy exports

If used in conjunction with DBIx::Class::Candy this component will export:

proxy_resultset_method

Dedication

This module is dedicated to Ray Bradbury, who wrote Something Wicked This Way Comes, Dandelion Wine, and numerous short stories, plays, etc etc. Read this author's books.

Releases

7 releases since Debian 7 (Wheezy); the text changed 6 times.

  1. 7
  2. 8
  3. 9
  4. 10
  5. 11
  6. 12
  7. 13

Author

Arthur Axel "fREW" Schmidt <[email protected]>

From libdbix-class-helpers-perl 2.037000-1 in Debian 13 (Trixie). Parsed by carta from the page's man source.