On 6/4/07, Ronald J Kimball <[EMAIL PROTECTED]> wrote:
Paul Makepeace wrote:
> I have a feeling this issue is known about from a message back on the
> 11th about collapse result but just in case:
>
> I notice adding a prefetch to a search causes some results to go
> missing in the case that the column being joined on is null in the
> first table. This is down to prefetch using an inner rather than left
> join. Presumably y'all had a reason for that? The left join solved it
> for me (in SQL tests). Is there a work-around for this?
You haven't shown us how you're defining your relationships, nor your
code to do the search.
If I define a might_have() relationship and do a prefetch, I get a LEFT
JOIN, as I expected. Perhaps you specified a has_one() relationship
where you meant to specify might_have()?
Ah yes, thanks (& Matt). I think that's it.
User.pm:
__PACKAGE__->belongs_to(company => 'Company' => { 'foreign.uid' => '
self.company_uid' });
To save an RTFM for those following along at home,
perldoc DBIx::Class::Relationship
If the relationship is optional -- i.e. the column containing the
for-
eign key can be NULL -- then the belongs_to relationship does the
right
thing. Thus, in the example above "$obj->author" would return
"undef".
However in this case you would probably want to set the "join_type"
attribute so that a "LEFT JOIN" is done, which makes complex
resultsets
involving "join" or "prefetch" operations work correctly. The
modified
declaration is shown below:
# in a Book class (where Author has_many Books)
__PACKAGE__->belongs_to(author => 'My::DBIC::Schema::Author',
'author', {join_type => 'left'});
P
_______________________________________________
List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
Wiki: http://dbix-class.shadowcatsystems.co.uk/
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/
Searchable Archive: http://www.mail-archive.com/[email protected]/