I need some help when select only discriminator column from doctrine 2 when run the DQL below
SELECT p.type FROM AppBundle\\Entity\\Product p
There is no direct access to the discriminator column.
It may happen that the entities of a special type should be queried. Because there is no direct access to the discriminator column, Doctrine provides the INSTANCE OF construct.
You can query for the type of your entity using the INSTANCE OF
DQL as described in the docs. As example:
$query = $em->createQuery("SELECT product FROM AppBundle\Entity\AbstractProduct product WHERE product INSTANCE OF AppBundle\Entity\Product");
$products = $query->getResult();
Hope this helps
I use this little "hack"
getType
method in this interfaceThat way you can retrieve the discriminator "generic" entity (Product
in your case) and call getType
onto it.
Of course if you're interested into result filtering done directly by sql, this is not a solution at all and, I'm afraid, there isn't any solution available at the moment.
If you find one better that this, please share with us.
You should be able to do this with a scalar result with INSTANCE OF
and a case, when, (else,) end
clause:
SELECT
(case
when p INSTANCE OF AppBundle\Entity\Product then \'0\'
when p INSTANCE OF AppBundle\Entity\Product\SingleIssue then \'1\'
when p INSTANCE OF AppBundle\Entity\Product\CountBasedIssue then \'2\'
when p INSTANCE OF AppBundle\Entity\Product\TimeBasedIssue then \'3\'
else \'foobar\'
end) as type
FROM
AppBundle\Entity\Product p
Of course the disadvantage is you have to update the query every time you add a DiscriminatorMap
entry.