From: Jess Robinson Date: Thu, 30 Jul 2009 20:17:33 +0000 (+0000) Subject: Mangled Rob's example somewhat, still needs explaining whch circs exactly cause the... X-Git-Tag: v0.08109~58 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=a2908180edad666e984bc983807bff3842f04e2e;p=dbsrgits%2FDBIx-Class.git Mangled Rob's example somewhat, still needs explaining whch circs exactly cause the borken results --- diff --git a/lib/DBIx/Class/ResultSet.pm b/lib/DBIx/Class/ResultSet.pm index b0619ce..1308a00 100644 --- a/lib/DBIx/Class/ResultSet.pm +++ b/lib/DBIx/Class/ResultSet.pm @@ -3382,25 +3382,29 @@ exactly as you might expect. =over 4 -=item * Prefetch uses the cache to populate the prefetched relationships. This +=item * + +Prefetch uses the L to populate the prefetched relationships. This may or may not be what you want. -=item * If you specify a condition on a prefetched relationship, ONLY those +=item * + +If you specify a condition on a prefetched relationship, ONLY those rows that match the prefetched condition will be fetched into that relationship. This means that adding prefetch to a search() B what is returned by -traversing a relationship. So, if you have Chas_many(Bar)> and you do +traversing a relationship. So, if you have Chas_many(CDs)> and you do - my $foo_rs = Foo->search({ - 'bars.col1' => $value, + my $artist_rs = $schema->resultset('Artist')->search({ + 'cds.year' => 2008, }, { - join => 'bars', + join => 'cds', }); - my $count = $foo_rs->first->bars->count; + my $count = $artist_rs->first->cds->count; - my $foo_rs_prefetch = $foo_rs->search( {}, { prefetch => 'bars' } ); + my $artist_rs_prefetch = $artist_rs->search( {}, { prefetch => 'cds' } ); - my $prefetch_count = $foo_rs_prefetch->first->bars->count; + my $prefetch_count = $artist_rs_prefetch->first->cds->count; cmp_ok( $count, '==', $prefetch_count, "Counts should be the same" );