DBIx::Class::Helper::ResultSet::Shortcut(3pm)

DBIx::Class::Helper::ResultSet::Shortcut3pm

Shortcuts to common searches (->order_by, etc)

Usage

 package MyApp::Schema::ResultSet::Foo;
 __PACKAGE__->load_components(qw{Helper::ResultSet::Shortcut});
 ...
 1;

And then elsewhere:

 # let's say you grab a resultset from somewhere else
 my $foo_rs = get_common_rs()
 # but I'd like it sorted!
   ->order_by({ -desc => 'power_level' })
 # and without those other dumb columns
   ->columns([qw/cromulence_ratio has_jimmies_rustled/])
 # but get rid of those duplicates
   ->distinct
 # and put those straight into hashrefs, please
   ->hri
 # but only give me the first 3
   ->rows(3);

Overview

This helper provides convenience methods for resultset modifications.

See "NOTE" in DBIx::Class::Helper::ResultSet for a nice way to apply it to your entire schema.

Methods

distinct

 $foo_rs->distinct
 # equivalent to...
 $foo_rs->search(undef, { distinct => 1 });

group_by

 $foo_rs->group_by([ qw/ some column names /])
 # equivalent to...
 $foo_rs->search(undef, { group_by => [ qw/ some column names /] });

order_by

 $foo_rs->order_by({ -desc => 'col1' });
 # equivalent to...
 $foo_rs->search(undef, { order_by => { -desc => 'col1' } });

You can also specify the order as a "magic string", e.g.:

 $foo_rs->order_by('!col1')       # ->order_by({ -desc => 'col1' })
 $foo_rs->order_by('col1,col2')   # ->order_by([qw(col1 col2)])
 $foo_rs->order_by('col1,!col2')  # ->order_by([{ -asc => 'col1' }, { -desc => 'col2' }])
 $foo_rs->order_by(qw(col1 col2)) # ->order_by([qw(col1 col2)])

Can mix it all up as well:

 $foo_rs->order_by(qw(col1 col2 col3), 'col4,!col5')

hri

 $foo_rs->hri;
 # equivalent to...
 $foo_rs->search(undef, {
    result_class => 'DBIx::Class::ResultClass::HashRefInflator'
 });

rows

 $foo_rs->rows(10);
 # equivalent to...
 $foo_rs->search(undef, { rows => 10 })

limit

This is an alias for "rows".

  $foo_rs->limit(10);
  # equivalent to...
  $foo_rs->rows(10);

has_rows

A lighter way to check the resultset contains any data rather than calling "$rs->count".

page

 $foo_rs->page(2);
 # equivalent to...
 $foo_rs->search(undef, { page => 2 })

limited_page

 $foo_rs->limited_page(2, 3);
 # equivalent to...
 $foo_rs->search(undef, { page => 2, rows => 3 })

columns

 $foo_rs->columns([qw/ some column names /]);
 # equivalent to...
 $foo_rs->search(undef, { columns => [qw/ some column names /] });

add_columns

 $foo_rs->add_columns([qw/ some column names /]);
 # equivalent to...
 $foo_rs->search(undef, { '+columns' => [qw/ some column names /] });

remove_columns

 $foo_rs->remove_columns([qw/ some column names /]);
 # equivalent to...
 $foo_rs->search(undef, { remove_columns => [qw/ some column names /] });

prefetch

 $foo_rs->prefetch('bar');
 # equivalent to...
 $foo_rs->search(undef, { prefetch => 'bar' });

results_exist($cond?)

 my $results_exist = $schema->resultset('Bar')->search({...})->results_exist;
 # there is no easily expressable equivalent, so this is not exactly a
 # shortcut. Nevertheless kept in this class for historical reasons

Uses "EXISTS" SQL function to check if the query would return anything. Usually much less resource intensive the more common "foo() if $rs->count" idiom.

The optional $cond argument can be used like in search().

results_exist_as_query($cond?)

 ...->search(
    {},
    { '+columns' => {
       subquery_has_members => $some_correlated_rs->results_exist_as_query
    }},
 );
 # there is no easily expressable equivalent, so this is not exactly a
 # shortcut. Nevertheless kept in this class for historical reasons

The query generator behind "results_exist". Can be used standalone in complex queries returning a boolean result within a larger query context.

null(@columns || \@columns)

 $rs->null('status');
 $rs->null(['status', 'title']);

not_null(@columns || \@columns)

 $rs->not_null('status');
 $rs->not_null(['status', 'title']);

like($column || \@columns, $cond)

 $rs->like('lyrics', '%zebra%');
 $rs->like(['lyrics', 'title'], '%zebra%');

not_like($column || \@columns, $cond)

 $rs->not_like('lyrics', '%zebra%');
 $rs->not_like(['lyrics', 'title'], '%zebra%');

Releases

6 releases since Debian 8 (Jessie); the text changed 5 times.

  1. 8
  2. 9
  3. 10
  4. 11
  5. 12
  6. 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.