2010-09-16 00:11:09 +04:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Doctrine\Tests\ORM\Functional\Ticket;
|
|
|
|
|
|
|
|
use Doctrine\Common\Collections\ArrayCollection;
|
|
|
|
use Doctrine\Tests\Models\CMS\CmsUser;
|
|
|
|
use Doctrine\Tests\Models\CMS\CmsGroup;
|
|
|
|
|
|
|
|
require_once __DIR__ . '/../../../TestInit.php';
|
|
|
|
|
|
|
|
class DDC767Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
|
|
|
{
|
|
|
|
protected function setUp()
|
|
|
|
{
|
|
|
|
$this->useModelSet('cms');
|
|
|
|
parent::setUp();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @group DDC-767
|
|
|
|
*/
|
|
|
|
public function testCollectionChangesInsideTransaction()
|
|
|
|
{
|
|
|
|
$user = new CmsUser();
|
|
|
|
$user->name = "beberlei";
|
|
|
|
$user->status = "active";
|
|
|
|
$user->username = "beberlei";
|
|
|
|
|
|
|
|
$group1 = new CmsGroup();
|
|
|
|
$group1->name = "foo";
|
|
|
|
|
|
|
|
$group2 = new CmsGroup();
|
|
|
|
$group2->name = "bar";
|
|
|
|
|
|
|
|
$group3 = new CmsGroup();
|
|
|
|
$group3->name = "baz";
|
|
|
|
|
|
|
|
$user->addGroup($group1);
|
|
|
|
$user->addGroup($group2);
|
|
|
|
|
|
|
|
$this->_em->persist($user);
|
|
|
|
$this->_em->persist($group1);
|
|
|
|
$this->_em->persist($group2);
|
|
|
|
$this->_em->persist($group3);
|
|
|
|
|
|
|
|
$this->_em->flush();
|
|
|
|
$this->_em->clear();
|
|
|
|
|
|
|
|
/* @var $pUser CmsUser */
|
|
|
|
$pUser = $this->_em->find(get_class($user), $user->id);
|
|
|
|
|
|
|
|
$this->assertNotNull($pUser, "User not retrieved from database.");
|
|
|
|
|
|
|
|
$groups = array(2, 3);
|
2011-12-20 01:56:19 +04:00
|
|
|
|
2010-09-16 00:11:09 +04:00
|
|
|
try {
|
|
|
|
$this->_em->beginTransaction();
|
|
|
|
|
|
|
|
$pUser->groups->clear();
|
|
|
|
|
|
|
|
$this->_em->flush();
|
|
|
|
|
|
|
|
// Add new
|
|
|
|
foreach ($groups as $groupId) {
|
|
|
|
$pUser->addGroup($this->_em->find(get_class($group1), $groupId));
|
|
|
|
}
|
|
|
|
|
|
|
|
$this->_em->flush();
|
|
|
|
$this->_em->commit();
|
|
|
|
} catch(\Exception $e) {
|
|
|
|
$this->_em->rollback();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|