[DDC-497] find() and findAll() on Repository do not work when SINGLE_TABLE inheritance is used Created: 05/Apr/10  Updated: 26/Apr/10  Resolved: 26/Apr/10

Status: Closed
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.0-ALPHA4
Fix Version/s: 2.0-BETA1
Security Level: All

Type: Bug Priority: Critical
Reporter: Marcus Assignee: Roman S. Borschel
Resolution: Fixed Votes: 0
Labels: None
Environment:

MacOsX 10.6.2 - Zend Server 4.0.6 - PHP 5.3 - MySql 5.1.40


Issue Links:
Reference
relates to DDC-500 Single Table Inheritance Selects Closed

 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 ?


 Comments   
Comment by Roman S. Borschel [ 05/Apr/10 ]

You mention ALPHA4 as the affected version. Did you test this with trunk?

Comment by Roman S. Borschel [ 05/Apr/10 ]

@"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."

Of course. Anything else would be wrong. If you query for cars you get all cars. BlueCars are Cars.

Comment by Marcus [ 07/Apr/10 ]

Tested with Revision: 7533.

Comment by Roman S. Borschel [ 26/Apr/10 ]

Fixed in http://github.com/doctrine/doctrine2/commit/760ea34a0cc3cae4e3caea17e8aab6ceb74ecace

Generated at Wed Apr 16 05:03:21 UTC 2014 using JIRA 5.2.7#850-sha1:b2af0c8dc8537b36121c6a579fabbdf79fc919e5.