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 elsemy $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%');
Copyright and license
This software is copyright (c) 2024 by Arthur Axel "fREW" Schmidt.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
Releases
6 releases since Debian 8 (Jessie); the text changed 5 times.