[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