Added fix for collection->contains when many-to-many extra lazy fetchMode
This commit is contained in:
parent
e8e830f10a
commit
5deebc8738
@ -254,7 +254,9 @@ class ManyToManyPersister extends AbstractCollectionPersister
|
||||
$uow = $this->_em->getUnitOfWork();
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
|
@ -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