[Dbix-class] wishlist: "might_have_many"

Mark Hedges hedges at ucsd.edu
Thu Apr 13 19:22:50 CEST 2006


On Thu, 13 Apr 2006, Matt S Trout wrote:
> Mike Rylander wrote:
> > On 4/12/06, Mark Hedges <hedges at ucsd.edu> wrote:
> >> I found that if I do a prefetch on a Foo RS to its have_many
> >> Bar, but it doesn't have any Bars, I don't get the Foo at all.
> >>
> >> This is similar to a problem where if I do a prefetch from one
> >> to another with a 1:1 relationship, but the other doesn't exist,
> >> it does not work if I defined with has_one but it does work if I
> >> defined if might_have.
> >>
> >> However there isn't a fix for a 1:N relationship.  (Doesn't 1:N
> >> imply that N could equal 0?)  Instead I have to remember where
> >> this drop might occur and I get no object, and I can't prefetch.
> >>
> > 
> > Sounds like has_many should use LEFT JOIN ... [he says, sniping from
> > the sidelines having not looked at the code]
> 
> It does :) -

Hrmm, you're right.  And when I just fetch that relationship it 
works fine, I get the top-level entity.  It happened when I did this:

    Foo has_many Bar belongs_to Baz

    ... prefetch => { bar => 'baz' }

But no Bar showed up.  Then I didn't get anything at all.

I seem to recall I had to make the second-level relationship
Bar belongs_to Baz to stop an infinite loop going the other 
direction from Baz has_one Bar.  Maybe I'm tying my 
shoelaces together.

Mark



More information about the Dbix-class mailing list