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].
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.

Reply via email to