You still cannot hydrate a `Bill` object with a subset of `Favorite` instances in it, as that would corrupt the data. You can use the good old SQL-style multi-column result:
SELECT f as fav, b as bill FROM Favorite f JOIN f.bill b WHERE f.id IN (SELECT f1.id FROM Bill b JOIN b.favorites f1 WHERE f1.user = :user OR f1.user IS NULL) Marco Pivetta http://twitter.com/Ocramius http://ocramius.github.com/ On Tue, Jun 27, 2017 at 8:11 AM, Joshua Wilson <[email protected]> wrote: > That would end up being a problem as I would only see a subset of bills > where as I want the complete list of bills with a subset of favorite, does > that make sense? > > On Tuesday, June 27, 2017 at 1:01:17 AM UTC-5, Marco Pivetta wrote: >> >> That's the same as >> >> SELECT b FROM Bill b LEFT JOIN b.favorites f WHERE f.user = :user OR >> f.user IS NULL >> >> That is a problem, as it will hydrate `Bill` objects with incomplete >> associations. >> >> Turn it around: >> >> SELECT f FROM Favorite f WHERE f.id IN (SELECT f1.id FROM Bill b JOIN >> b.favorites f1 WHERE f1.user = :user OR f1.user IS NULL) >> >> >> Marco Pivetta >> >> http://twitter.com/Ocramius >> >> http://ocramius.github.com/ >> >> On Tue, Jun 27, 2017 at 7:58 AM, Joshua Wilson <[email protected]> wrote: >> >>> Actaully, based on your first response, I went back at looked at the >>> criteria builder even more and ended up messing around with it and got a >>> working example: >>> >>> $qb = $this->bill_repository->createQueryBuilder('b') >>> ->leftJoin('b.favorites', 'f'); >>> >>> $critera = new Criteria(); >>> $critera->where(Criteria::expr()->eq("f.user_id", $user->id)); >>> $critera->orWhere(Criteria::expr()->eq("f.user_id", null)); >>> $qb->addCriteria($critera); >>> >>> >>> On Tuesday, June 27, 2017 at 12:43:24 AM UTC-5, Marco Pivetta wrote: >>>> >>>> Could you make a more clear example with your currently entity >>>> definitions? Keep it minimal, but try showing what the expected result >>>> would be like >>>> >>>> Marco Pivetta >>>> >>>> http://twitter.com/Ocramius >>>> >>>> http://ocramius.github.com/ >>>> >>>> On Tue, Jun 27, 2017 at 7:40 AM, Joshua Wilson <[email protected]> >>>> wrote: >>>> >>>>> I have but I dont quite understand how to work with it, in an ideal >>>>> world i'd basically like something like... >>>>> >>>>> SELECT a.*, b.* FROM table a LEFT JOIN table b ON b.column = a.column >>>>> WITH b.other_column = 1; >>>>> >>>>> Basically, at the end of the day, I have a table full of items, users >>>>> can favorite those items, but I dont want users to see what each other >>>>> have >>>>> favorited when I display the list of items, I only want the user making >>>>> the >>>>> request to be able to see what items they have favorited. Granted I can >>>>> probably loop over the results from the query and check each record and >>>>> mark if it was favorited but I already have a one to many relationship >>>>> setup between items and favorites and it'd be really nice if I could just >>>>> return the single favorite record for the user who is looking at the list >>>>> of items >>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "doctrine-user" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to [email protected]. >>>>> To post to this group, send email to [email protected]. >>>>> Visit this group at https://groups.google.com/group/doctrine-user. >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> >>>> -- >>> You received this message because you are subscribed to the Google >>> Groups "doctrine-user" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> To post to this group, send email to [email protected]. >>> Visit this group at https://groups.google.com/group/doctrine-user. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- > You received this message because you are subscribed to the Google Groups > "doctrine-user" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at https://groups.google.com/group/doctrine-user. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "doctrine-user" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/doctrine-user. For more options, visit https://groups.google.com/d/optout.
