Skip to content

Commit

Permalink
Merge pull request #259 from danielholmes/m2m_extra_lazy_contains
Browse files Browse the repository at this point in the history
Added fix for collection->contains with many-to-many extra lazy fetchMode
  • Loading branch information
guilhermeblanco committed Jan 17, 2012
2 parents 2bb5115 + a12e5ac commit c1012f7
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 2 deletions.
6 changes: 4 additions & 2 deletions lib/Doctrine/ORM/Persisters/ManyToManyPersister.php
Expand Up @@ -254,7 +254,9 @@ public function contains(PersistentCollection $coll, $element)
$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;
}

Expand All @@ -275,7 +277,7 @@ public function removeElement(PersistentCollection $coll, $element)
$uow = $this->_em->getUnitOfWork();

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

Expand Down
@@ -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);
}
}

0 comments on commit c1012f7

Please sign in to comment.