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.
