Merge branch 'hotfix/#1572-target-entity-resolver-dql-with-interfaces-support-2.6.x'
Close #1572
This commit is contained in:
commit
6099e45eef
@ -996,9 +996,7 @@ class Parser
|
|||||||
*/
|
*/
|
||||||
private function validateAbstractSchemaName($schemaName)
|
private function validateAbstractSchemaName($schemaName)
|
||||||
{
|
{
|
||||||
$exists = class_exists($schemaName, true);
|
if (! (class_exists($schemaName, true) || interface_exists($schemaName, true))) {
|
||||||
|
|
||||||
if (! $exists) {
|
|
||||||
$this->semanticalError("Class '$schemaName' is not defined.", $this->lexer->token);
|
$this->semanticalError("Class '$schemaName' is not defined.", $this->lexer->token);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1814,7 +1812,7 @@ class Parser
|
|||||||
$this->match(Lexer::T_OPEN_CURLY_BRACE);
|
$this->match(Lexer::T_OPEN_CURLY_BRACE);
|
||||||
$this->match(Lexer::T_IDENTIFIER);
|
$this->match(Lexer::T_IDENTIFIER);
|
||||||
|
|
||||||
$field = $this->lexer->token['value'];
|
$field = $this->lexer->token['value'];
|
||||||
|
|
||||||
// First field in partial expression might be embeddable property
|
// First field in partial expression might be embeddable property
|
||||||
while ($this->lexer->isNextToken(Lexer::T_DOT)) {
|
while ($this->lexer->isNextToken(Lexer::T_DOT)) {
|
||||||
|
@ -9,19 +9,19 @@ use Doctrine\ORM\Events;
|
|||||||
class ResolveTargetEntityListenerTest extends \Doctrine\Tests\OrmTestCase
|
class ResolveTargetEntityListenerTest extends \Doctrine\Tests\OrmTestCase
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var EntityManager
|
* @var \Doctrine\ORM\EntityManager
|
||||||
*/
|
*/
|
||||||
private $em = null;
|
private $em;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var ResolveTargetEntityListener
|
* @var ResolveTargetEntityListener
|
||||||
*/
|
*/
|
||||||
private $listener = null;
|
private $listener;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var ClassMetadataFactory
|
* @var ClassMetadataFactory
|
||||||
*/
|
*/
|
||||||
private $factory = null;
|
private $factory;
|
||||||
|
|
||||||
public function setUp()
|
public function setUp()
|
||||||
{
|
{
|
||||||
@ -106,6 +106,32 @@ class ResolveTargetEntityListenerTest extends \Doctrine\Tests\OrmTestCase
|
|||||||
$this->assertSame('Doctrine\Tests\ORM\Tools\TargetEntity', $meta['targetEntity']);
|
$this->assertSame('Doctrine\Tests\ORM\Tools\TargetEntity', $meta['targetEntity']);
|
||||||
$this->assertEquals(array('resolvetargetentity_id', 'targetinterface_id'), $meta['joinTableColumns']);
|
$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
|
interface ResolveTargetInterface
|
||||||
|
Loading…
x
Reference in New Issue
Block a user