Merge pull request #710 from sandermarechal/extra-lazy-get-fix
Fix extra lazy get
This commit is contained in:
commit
69fe5c48f4
@ -518,6 +518,7 @@ final class PersistentCollection implements Collection, Selectable
|
|||||||
public function get($key)
|
public function get($key)
|
||||||
{
|
{
|
||||||
if ( ! $this->initialized
|
if ( ! $this->initialized
|
||||||
|
&& $this->association['type'] === Mapping\ClassMetadataInfo::ONE_TO_MANY
|
||||||
&& $this->association['fetch'] === Mapping\ClassMetadataInfo::FETCH_EXTRA_LAZY
|
&& $this->association['fetch'] === Mapping\ClassMetadataInfo::FETCH_EXTRA_LAZY
|
||||||
&& isset($this->association['indexBy'])
|
&& isset($this->association['indexBy'])
|
||||||
) {
|
) {
|
||||||
|
@ -33,24 +33,6 @@ use Doctrine\ORM\UnitOfWork;
|
|||||||
*/
|
*/
|
||||||
class ManyToManyPersister extends AbstractCollectionPersister
|
class ManyToManyPersister extends AbstractCollectionPersister
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*
|
|
||||||
* @override
|
|
||||||
*/
|
|
||||||
public function get(PersistentCollection $coll, $index)
|
|
||||||
{
|
|
||||||
$mapping = $coll->getMapping();
|
|
||||||
$uow = $this->em->getUnitOfWork();
|
|
||||||
$persister = $uow->getEntityPersister($mapping['targetEntity']);
|
|
||||||
|
|
||||||
if (!isset($mapping['indexBy'])) {
|
|
||||||
throw new \BadMethodCallException("Selecting a collection by index is only supported on indexed collections.");
|
|
||||||
}
|
|
||||||
|
|
||||||
return $persister->load(array($mapping['indexBy'] => $index), null, null, array(), 0, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*
|
*
|
||||||
|
@ -47,7 +47,7 @@ class OneToManyPersister extends AbstractCollectionPersister
|
|||||||
throw new \BadMethodCallException("Selecting a collection by index is only supported on indexed collections.");
|
throw new \BadMethodCallException("Selecting a collection by index is only supported on indexed collections.");
|
||||||
}
|
}
|
||||||
|
|
||||||
return $persister->load(array($mapping['indexBy'] => $index), null, null, array(), 0, 1);
|
return $persister->load(array($mapping['mappedBy'] => $coll->getOwner(), $mapping['indexBy'] => $index), null, null, array(), 0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -17,7 +17,6 @@ class ExtraLazyCollectionTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
|||||||
private $groupId;
|
private $groupId;
|
||||||
private $articleId;
|
private $articleId;
|
||||||
|
|
||||||
private $groupname;
|
|
||||||
private $topic;
|
private $topic;
|
||||||
private $phonenumber;
|
private $phonenumber;
|
||||||
|
|
||||||
@ -562,33 +561,13 @@ class ExtraLazyCollectionTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
|||||||
$this->assertSame($article, $this->_em->find('Doctrine\Tests\Models\CMS\CmsArticle', $this->articleId));
|
$this->assertSame($article, $this->_em->find('Doctrine\Tests\Models\CMS\CmsArticle', $this->articleId));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @group DDC-1398
|
|
||||||
*/
|
|
||||||
public function testGetIndexByManyToMany()
|
|
||||||
{
|
|
||||||
$user = $this->_em->find('Doctrine\Tests\Models\CMS\CmsUser', $this->userId);
|
|
||||||
/* @var $user CmsUser */
|
|
||||||
|
|
||||||
$queryCount = $this->getCurrentQueryCount();
|
|
||||||
|
|
||||||
$group = $user->groups->get($this->groupname);
|
|
||||||
|
|
||||||
$this->assertFalse($user->groups->isInitialized());
|
|
||||||
$this->assertEquals($queryCount + 1, $this->getCurrentQueryCount());
|
|
||||||
$this->assertSame($group, $this->_em->find('Doctrine\Tests\Models\CMS\CmsGroup', $this->groupId));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @group DDC-1398
|
* @group DDC-1398
|
||||||
*/
|
*/
|
||||||
public function testGetNonExistentIndexBy()
|
public function testGetNonExistentIndexBy()
|
||||||
{
|
{
|
||||||
$user = $this->_em->find('Doctrine\Tests\Models\CMS\CmsUser', $this->userId);
|
$user = $this->_em->find('Doctrine\Tests\Models\CMS\CmsUser', $this->userId);
|
||||||
/* @var $user CmsUser */
|
|
||||||
|
|
||||||
$this->assertNull($user->articles->get(-1));
|
$this->assertNull($user->articles->get(-1));
|
||||||
$this->assertNull($user->groups->get(-1));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function loadFixture()
|
private function loadFixture()
|
||||||
@ -668,7 +647,6 @@ class ExtraLazyCollectionTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
|||||||
$this->userId = $user1->getId();
|
$this->userId = $user1->getId();
|
||||||
$this->groupId = $group1->id;
|
$this->groupId = $group1->id;
|
||||||
|
|
||||||
$this->groupname = $group1->name;
|
|
||||||
$this->topic = $article1->topic;
|
$this->topic = $article1->topic;
|
||||||
$this->phonenumber = $phonenumber1->phonenumber;
|
$this->phonenumber = $phonenumber1->phonenumber;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user