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:
commit
c1012f7970
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user