1
0
mirror of synced 2025-01-30 20:11:49 +03:00

Merge pull request #259 from danielholmes/m2m_extra_lazy_contains

Added fix for collection->contains with many-to-many extra lazy fetchMode
This commit is contained in:
Guilherme Blanco 2012-01-16 19:51:11 -08:00
commit c1012f7970
2 changed files with 59 additions and 2 deletions

View File

@ -254,7 +254,9 @@ class ManyToManyPersister extends AbstractCollectionPersister
$uow = $this->_em->getUnitOfWork(); $uow = $this->_em->getUnitOfWork();
// shortcut for new entities // shortcut for new entities
if ($uow->getEntityState($element, UnitOfWork::STATE_NEW) == UnitOfWork::STATE_NEW) { $entityState = $uow->getEntityState($element, UnitOfWork::STATE_NEW);
if ($entityState === UnitOfWork::STATE_NEW ||
($entityState === UnitOfWork::STATE_MANAGED && $uow->isScheduledForInsert($element))) {
return false; return false;
} }
@ -275,7 +277,7 @@ class ManyToManyPersister extends AbstractCollectionPersister
$uow = $this->_em->getUnitOfWork(); $uow = $this->_em->getUnitOfWork();
// shortcut for new entities // shortcut for new entities
if ($uow->getEntityState($element, UnitOfWork::STATE_NEW) == UnitOfWork::STATE_NEW) { if ($uow->getEntityState($element, UnitOfWork::STATE_NEW) === UnitOfWork::STATE_NEW) {
return false; return false;
} }

View File

@ -0,0 +1,55 @@
<?php
namespace Doctrine\Tests\ORM\Functional;
use Doctrine\Common\Collections\ArrayCollection;
require_once __DIR__ . '/../../TestInit.php';
/**
*
*/
class ManyToManyExtraLazyContainsTest extends \Doctrine\Tests\OrmFunctionalTestCase
{
public function setUp()
{
$this->useModelSet('company');
parent::setUp();
}
public function testManyToManyExtraLazyContainsAddedPendingInsertEntityIsTrue()
{
$contract = new \Doctrine\Tests\Models\Company\CompanyFlexContract();
$this->_em->persist($contract);
$this->_em->flush();
$this->_em->clear();
$contract = $this->_em->find('Doctrine\Tests\Models\Company\CompanyFlexContract', $contract->getId());
$pendingInsertManager = new \Doctrine\Tests\Models\Company\CompanyManager();
$this->_em->persist($pendingInsertManager);
$contract->getManagers()->add($pendingInsertManager);
$result = $contract->getManagers()->contains($pendingInsertManager);
$this->assertTrue($result);
}
public function testManyToManyExtraLazyContainsNonAddedPendingInsertEntityIsFalse()
{
$contract = new \Doctrine\Tests\Models\Company\CompanyFlexContract();
$this->_em->persist($contract);
$this->_em->flush();
$this->_em->clear();
$contract = $this->_em->find('Doctrine\Tests\Models\Company\CompanyFlexContract', $contract->getId());
$pendingInsertManager = new \Doctrine\Tests\Models\Company\CompanyManager();
$this->_em->persist($pendingInsertManager);
$result = $contract->getManagers()->contains($pendingInsertManager);
$this->assertFalse($result);
}
}