Compare commits
2 Commits
e74686dd34
...
ff61ab78a9
Author | SHA1 | Date |
---|---|---|
barnold | ff61ab78a9 | |
barnold | 3ef9852367 |
|
@ -13,6 +13,7 @@ sub books ($self) {
|
||||||
my $book_page = $book_model->get_page(
|
my $book_page = $book_model->get_page(
|
||||||
$page_number,
|
$page_number,
|
||||||
$self->param('title_like'),
|
$self->param('title_like'),
|
||||||
|
$self->param('author_like'),
|
||||||
);
|
);
|
||||||
my $pager = $book_page->pager;
|
my $pager = $book_page->pager;
|
||||||
if ($page_number > $pager->last_page) {
|
if ($page_number > $pager->last_page) {
|
||||||
|
@ -35,6 +36,7 @@ sub authors ($self) {
|
||||||
my $author_page = $author_model->get_page(
|
my $author_page = $author_model->get_page(
|
||||||
$page_number,
|
$page_number,
|
||||||
$self->param('name_like'),
|
$self->param('name_like'),
|
||||||
|
$self->param('minimum_book_count') + 0, # cast blank to 0
|
||||||
);
|
);
|
||||||
my $pager = $author_page->pager;
|
my $pager = $author_page->pager;
|
||||||
if ($page_number > $pager->last_page) {
|
if ($page_number > $pager->last_page) {
|
||||||
|
|
|
@ -4,14 +4,17 @@ use Moose;
|
||||||
extends 'MyModel';
|
extends 'MyModel';
|
||||||
no warnings qw( experimental::signatures );
|
no warnings qw( experimental::signatures );
|
||||||
|
|
||||||
sub get_page ($self, $page_number = 1, $name_like = undef) {
|
sub get_page ($self, $page_number = 1, $name_like = undef, $count_min = 0) {
|
||||||
my $search_condition = (defined $name_like)
|
my $search_condition = (defined $name_like)
|
||||||
? { "me.name" => { ilike => "\%$name_like\%" } }
|
? { "me.name" => { ilike => "\%$name_like\%" } }
|
||||||
: undef;
|
: undef;
|
||||||
my $rs = $self->schema->resultset('Author')->search_rs(
|
my $rs = $self->schema->resultset('Author')->search_rs(
|
||||||
$search_condition,
|
$search_condition,
|
||||||
{ prefetch => [ "books" ],
|
{ join => 'books',
|
||||||
order_by => [ "me.name " ],
|
select => [ 'me.id', 'me.name', { count => 'books.id', -as => 'bcount' } ],
|
||||||
|
order_by => [ 'me.name' ],
|
||||||
|
group_by => [ 'me.id', 'me.name' ],
|
||||||
|
having => \[ 'count(books.id) >= ?', $count_min ],
|
||||||
page => $page_number,
|
page => $page_number,
|
||||||
rows => $self->rows_per_page,
|
rows => $self->rows_per_page,
|
||||||
},
|
},
|
||||||
|
|
|
@ -9,10 +9,12 @@ sub count_all ($self) {
|
||||||
return $book_count;
|
return $book_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub get_page ($self, $page_number = 1, $title_like = undef) {
|
sub get_page ($self, $page_number = 1, $title_like = undef, $author_like = undef) {
|
||||||
my $search_condition = (defined $title_like)
|
my $search_condition = {};
|
||||||
? { "me.title" => { ilike => "\%$title_like\%" } }
|
$search_condition->{ "me.title" } = { ilike => "\%$title_like\%" }
|
||||||
: undef;
|
if (defined $title_like);
|
||||||
|
$search_condition->{ "author.name" } = { ilike => "\%$author_like\%" }
|
||||||
|
if (defined $author_like);
|
||||||
my $rs = $self->schema->resultset('Book')->search_rs(
|
my $rs = $self->schema->resultset('Book')->search_rs(
|
||||||
$search_condition,
|
$search_condition,
|
||||||
{ prefetch => [ "author" ],
|
{ prefetch => [ "author" ],
|
||||||
|
|
|
@ -6,6 +6,9 @@
|
||||||
%= form_for authors => { page_number => 1 } => begin
|
%= form_for authors => { page_number => 1 } => begin
|
||||||
%= label_for name_like => 'Name like'
|
%= label_for name_like => 'Name like'
|
||||||
%= text_field name_like => flash('name_like')
|
%= text_field name_like => flash('name_like')
|
||||||
|
%= label_for minimum_book_count => 'Wrote at least'
|
||||||
|
<%= number_field minimum_book_count => 0,
|
||||||
|
min => 0, maxlength => 4, size => 4 %> books.
|
||||||
%= submit_button "Search"
|
%= submit_button "Search"
|
||||||
%= end
|
%= end
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,8 @@
|
||||||
%= form_for books => { page_number => 1 } => begin
|
%= form_for books => { page_number => 1 } => begin
|
||||||
%= label_for title_like => 'Title like'
|
%= label_for title_like => 'Title like'
|
||||||
%= text_field title_like => flash('title_like')
|
%= text_field title_like => flash('title_like')
|
||||||
|
%= label_for author_like => 'Author like'
|
||||||
|
%= text_field author_like => flash('author_like')
|
||||||
%= submit_button "Search"
|
%= submit_button "Search"
|
||||||
%= end
|
%= end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue