1
0
mirror of synced 2024-12-13 22:56:04 +03:00

Merge pull request #710 from sandermarechal/extra-lazy-get-fix

Fix extra lazy get
This commit is contained in:
Benjamin Eberlei 2013-06-30 01:37:26 -07:00
commit 69fe5c48f4
4 changed files with 3 additions and 42 deletions

View File

@ -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'])
) { ) {

View File

@ -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}
* *

View File

@ -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);
} }
/** /**

View File

@ -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;
} }