Thank you for you reply but I don't want do lazy loading. I need to retrieve all information in 1 request.
select p from PetAppCoreBundle:Pet p left join p.litter l left join l.producers prod where ?? => producer is abstract Party Entity (with discriminator) - Person extend Party - Kennel extend Party I want to do a where on subtype (Person.firstname). where ?? => how to precise table subtype ? Le samedi 18 janvier 2014 12:01:14 UTC+1, Jàπ (Jasper N. Brouwer) a écrit : > > > How to do a where condition on person.firstname = 'John' ? > > Because $firstname is a property on Person, not on Party (nor Kennel), you > actually only want to fetch Person entities. You could write the query as > follows: > > SELECT p FROM PetAppCoreBundle:Person P WHERE p.firstname = :firstname > > -- > Jasper N. Brouwer > (@jaspernbrouwer) > > > On 18 Jan 2014, at 11:09, David R <[email protected] <javascript:>> > wrote: > > > Hello, > > > > I have the following Joined Inheritance configuration : > > > > /** > > > > * @ORM\Entity > > > > * @ORM\Table("party") > > > > * @ORM\InheritanceType("JOINED") > > > > * @ORM\DiscriminatorColumn(name="type", type="string") > > > > * @ORM\DiscriminatorMap({"person" = "Person", "kennel" = "Kennel"}) > > > > * > @ORM\Entity(repositoryClass="PetApp\CoreBundle\Entity\PartyRepository") > > > > */ > > abstract class Party > > { > > ... > > } > > > > > > /** > > > > * Person > > > > * > > > > * @ORM\Table("person") > > > > * @ORM\Entity > > > > * > @ORM\Entity(repositoryClass="PetApp\CoreBundle\Entity\PersonRepository") > > > > */ > > class Person extends Party > > { > > firstname; > > ... > > } > > > > > > /** > > > > * Kennel > > > > * > > > > * @ORM\Table("kennel") > > > > * @ORM\Entity > > > > * > @ORM\Entity(repositoryClass="PetApp\CoreBundle\Entity\KennelRepository") > > > > */ > > class Kennel extends Party > > { > > name; > > } > > > > > > With query builder if I join with abstract entity, I can see in Symfony > profiler that ORM executed 2 supplementary left join to resolve > inheritance. > > That's correct, but how to add where condition on subtype ? > > Example : How to do a where condition on person.firstname = 'John' ? > > > > Query builder : > > $qb = $this->createQueryBuilder('p') > > ->leftJoin('p.litter', 'l') > > ->addSelect('l') > > ->leftJoin('l.producers', 'prod') > > ->addSelect('prod') > > ->where('p.name LIKE :term')->setParameter('term', > '%'.$term.'%') > > > > > > SELECT > > > > > > p0_.id AS id0, > > > > > > p0_.name AS name1, > > > > > > p0_.gender AS gender2, > > > > > > p0_.chip AS chip3, > > > > > > p0_.tatoo AS tatoo4, > > > > > > p0_.lof AS lof5, > > > > > > p0_.death AS death6, > > > > > > l1_.id AS id7, > > > > > > l1_.name AS name8, > > > > > > l1_.birth AS birth9, > > > > > > p2_.id AS id10, > > > > > > p3_.firstname AS firstname11, > > > > > > p3_.lastname AS lastname12, > > > > > > k4_.name AS name13, > > > > > > p0_.type_id AS type_id14, > > > > > > p0_.color_id AS color_id15, > > > > > > p0_.litter_id AS litter_id16, > > > > > > l1_.sire_id AS sire_id17, > > > > > > l1_.dam_id AS dam_id18, > > > > > > p2_.type AS type19 > > > > > > FROM > > > > > > pet p0_ > > > > > > LEFT JOIN litter l1_ ON p0_.litter_id = l1_.id > > > > > > LEFT JOIN producers p5_ ON l1_.id = p5_.litter_id > > > > > > LEFT JOIN party p2_ ON p2_.id = p5_.party_id > > > > > > LEFT JOIN person p3_ ON p2_.id = p3_.id > > > > > > LEFT JOIN kennel k4_ ON p2_.id = k4_.id > > > > > > WHERE > > > > > > p0_.name LIKE ? > > > > Should I use DBAL directly with my own SQL request to resolve this issue > ? > > > > Help appreciate. > > Thanks > > David. > > > > > > -- > > 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] <javascript:>. > > To post to this group, send email to > > [email protected]<javascript:>. > > > Visit this group at http://groups.google.com/group/doctrine-user. > > For more options, visit https://groups.google.com/groups/opt_out. > > -- 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 http://groups.google.com/group/doctrine-user. For more options, visit https://groups.google.com/groups/opt_out.
