On 22 Aug 2018, at 19:50, Thomas Klausner <d...@cpan.org> wrote:
> Hi!
> On Wed, Aug 22, 2018 at 07:14:39PM +0100, Andy Armstrong wrote:
>> With DBIC every call to $prog->service->name results in a query 
>> against services - so for a page of 20 search results that's 20 
>> additional queries. Even on a single page it's often the case that 
>> many of those queries are searching for the same service.
> Take a look at 'prefetch', which will fetch all of the data from the 
> related table, so your search will be again one query only.

Thanks Thomas - that just about does it.

I should perhaps have mentioned that services may also do a self join to find a 
parent service - services are either one or two levels deep. I can make 
prefetch work for a single level service and I can make it work for two level 
services but not, as far as I can see, for both.

If I do prefetch => ['service', { service => 'parent' }] I only get results for 
the cases where the service hierarchy is two levels deep.

Having said that I inherited the self-join hierarchical service table - that 
could probably be refactored so that all services are a super-service - 
sub-service hierarchy which would, I think, solve the problem.

Thanks :)

Andy Armstrong, Hexten

List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
Searchable Archive: http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk

Reply via email to