Hi, Ian See below,
On Mon, 27 Jul 2009 21:32:36 +0100 Ian Sillitoe <[email protected]> wrote: > > > > Could be wrong, but I think the former is causing the resultset to > > be evaluated as an array and is therefore returning all the entries > > before the pager is being applied. > > > > Apologies - I was talking rubbish about the usage of stash being the > cause (although I do think the resultset is being reset somewhere > along the line). > > Noting the following, I agree that the 'pager' code is probably > correct > > and the 'result' code seems to be the gremlin. How they interact is > > beyond me > > > $result is a DBIx::Class::ResultSet object and is being returned from > the call to $c->model('Address::Addresses')->search(). This resultset > object has a method called $result->page($page_number) which sets up > the database query with the correct start and stop for the given page > number and entries per page (default=10). It also has a > $result->pager() method which returns a Data::Page object - this just > provides a useful container for accessing page-related information of > the related DB query. > > > http://search.cpan.org/~ribasushi/DBIx-Class-0.08108/lib/DBIx/Class/ResultSet.pm > > If the $pager is telling you the correct information (that the query > only has 10 entries) but this is changing by the time it is being > rendered in your template then perhaps another call is being made to > the database (i.e. because something else is changing > $c->stash->result). Have you tried setting DBIC_TRACE=1 in your > environment and looking at the logs to check that the database > queries look sensible? > > You could also check that the resultset at least has the correct > number of entries just before you leave your search function: > > $c->log->info( "Current Page: " . $page ); > $c->log->info( "Results: " . $result->count ); # NB: this will > perform a DB query > $c->log->info( "Leaving 'search' method..." ); this produces 2 items of note if I put it after the search 1. 'Use of uninitialized value $page in concatenation (.) or string at ....' ($page is declared in the line .... = @_) 2. [info] Current Page: [info] Results: 11 [info] Leaving 'search' method... -------------------------------------------- but if I put it after this line $page = 1 ; #if($page !~ /^\d+$/); I get 1. 'Use of uninitialized value $page in pattern match (m//) at ... ' (a SELECT COUNT( * ) FROM occurs immediately after this ) lower down, we get the run of outputs from SELECT me.id, which match up fine to the records expected and delivered, ( I set DBIC_TRACE=1). Should these not show up before the pattern match line? 2. then just at the end [info] Current Page: 1 [info] Results: 11 [info] Leaving 'search' method... so pages are assigned in the pager code, but the no of results is carried over from the search code These things have a way of getting more complex, so if this info does not indicate a clear solution, then I don't want to waste valuable time, rather I might find more in the new book, and must advance further in my perl studies (not very far into Intermediate Perl at present). Although I hate being beaten, TIMTOWTDI (whatever) Anne > > I note that Bindlex used to bring up a warning when the catalyst > > development server was started, but I do not see this now. Has > > Bindlex perhaps been un-deprecated? > > > > Nope - > http://search.cpan.org/~mstrout/Catalyst-Controller-BindLex-0.05/lib/Catalyst/Controller/BindLex.pm > > > Cheers, > > Ian _______________________________________________ List: [email protected] Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/[email protected]/ Dev site: http://dev.catalyst.perl.org/
