diff --git a/lib/Doctrine/ORM/Query/Parser.php b/lib/Doctrine/ORM/Query/Parser.php index 442dbac80..695e7ed10 100644 --- a/lib/Doctrine/ORM/Query/Parser.php +++ b/lib/Doctrine/ORM/Query/Parser.php @@ -965,7 +965,7 @@ class Parser $schemaName = $this->em->getConfiguration()->getEntityNamespace($namespaceAlias) . '\\' . $simpleClassName; } - $exists = class_exists($schemaName, true); + $exists = class_exists($schemaName, true) || interface_exists($schemaName, true); if ( ! $exists) { $this->semanticalError("Class '$schemaName' is not defined.", $this->lexer->token); diff --git a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php index fdee6e8c2..2934693f8 100644 --- a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php @@ -9,19 +9,19 @@ use Doctrine\ORM\Events; class ResolveTargetEntityListenerTest extends \Doctrine\Tests\OrmTestCase { /** - * @var EntityManager + * @var \Doctrine\ORM\EntityManager */ - private $em = null; + private $em; /** * @var ResolveTargetEntityListener */ - private $listener = null; + private $listener; /** * @var ClassMetadataFactory */ - private $factory = null; + private $factory; public function setUp() { @@ -106,6 +106,32 @@ class ResolveTargetEntityListenerTest extends \Doctrine\Tests\OrmTestCase $this->assertSame('Doctrine\Tests\ORM\Tools\TargetEntity', $meta['targetEntity']); $this->assertEquals(array('resolvetargetentity_id', 'targetinterface_id'), $meta['joinTableColumns']); } + + /** + * @group 1572 + * @group functional + * + * @coversNothing + */ + public function testDoesResolveTargetEntitiesInDQLAlsoWithInterfaces() + { + $evm = $this->em->getEventManager(); + $this->listener->addResolveTargetEntity( + 'Doctrine\Tests\ORM\Tools\ResolveTargetInterface', + 'Doctrine\Tests\ORM\Tools\ResolveTargetEntity', + array() + ); + + $evm->addEventSubscriber($this->listener); + + $this->assertStringMatchesFormat( + 'SELECT%AFROM ResolveTargetEntity%A', + $this + ->em + ->createQuery('SELECT f FROM Doctrine\Tests\ORM\Tools\ResolveTargetInterface f') + ->getSQL() + ); + } } interface ResolveTargetInterface