1
0
mirror of synced 2025-01-18 06:21:40 +03:00

Added fix for collection->contains when many-to-many extra lazy fetchMode

This commit is contained in:
Daniel Holmes 2012-01-15 23:25:57 +11:00
parent e8e830f10a
commit 5deebc8738
2 changed files with 58 additions and 1 deletions

View File

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

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