Details
Description
Class Orm\Models\Car:
@Entity
@Table(name="cars")
@InheritanceType("SINGLE_TABLE")
@DiscriminatorColumn(name="discr", type="string")
@DiscriminatorMap({"car" = "Orm\Models\Car", "bluecar" = "Orm\Models\BlueCar"})
Class Orm\Models\BlueCar extends Orm\Models\Car:
@Entity
Now my Database holds 4 records:
id title discr
1 blue car bluecar
2 only Car car
5 blue car2 bluecar
6 only Car2 car
Now querying objects by Repository leads to some errors.
//quering for all BlueCars
$em->getRepository('Orm\Models\BlueCar')->findAll();
//the result set counts 4 objects
blue car : Orm\Models\BlueCar
: Orm\Models\Car
blue car2 : Orm\Models\BlueCar
: Orm\Models\Car
//The 2 Car Items where the title is missing are to much for this result set, and useless
// there is also a php notice coming up for each Orm\Models\Car object
Notice: Undefined index: id in /library/Doctrine/ORM/UnitOfWork.php on line 1727
I use mysql as Database and so the sql query looks like this.
"SELECT c0.id AS id1, c0.title AS title2, discr FROM cars c0"
It seems that the query is missing the where discriminator = "bluecar" part
querying for Car
$em->getRepository('Orm\Models\Car')->findAll();
blue car: Orm\Models\BlueCar
only Car: Orm\Models\Car
blue car2: Orm\Models\BlueCar
only Car2: Orm\Models\Car
Is working without errors but i think it is a mere chance if you look at the query
"SELECT c0.id AS id1, c0.title AS title2, discr FROM cars c0" it is the same.
I am not shure if it is intended that quering for Cars also returns BlueCars but due to the behavior when using DQL for quering, i guess it is right.
That means, when using DQL:
$q = $em->createQuery('select u from Orm\Models\BlueCar u');
$results = $q->execute();
everything works as expected, so using a custom EntityRepository and override find, findAll and so on is a workaround. So this is a minor bug ?
Issue Links
- relates to
-
DDC-500
Single Table Inheritance Selects
-
You mention ALPHA4 as the affected version. Did you test this with trunk?