133 lines
3.4 KiB
PHP
133 lines
3.4 KiB
PHP
<?php
|
|
|
|
namespace Doctrine\Tests\ORM\Functional\Ticket;
|
|
|
|
use Doctrine\Common\Collections\ArrayCollection;
|
|
|
|
require_once __DIR__ . '/../../../TestInit.php';
|
|
|
|
class DDC742Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
|
{
|
|
private $userCm;
|
|
private $commentCm;
|
|
|
|
protected function setUp()
|
|
{
|
|
parent::setUp();
|
|
|
|
if (\extension_loaded('memcache') && @fsockopen('localhost', 11211)) {
|
|
$memcache = new \Memcache();
|
|
$memcache->addServer('localhost');
|
|
$memcache->flush();
|
|
|
|
$cacheDriver = new \Doctrine\Common\Cache\MemcacheCache();
|
|
$cacheDriver->setMemcache($memcache);
|
|
|
|
$this->_em->getMetadataFactory()->setCacheDriver($cacheDriver);
|
|
} else if (\extension_loaded('apc')) {
|
|
$this->_em->getMetadataFactory()->setCacheDriver(new \Doctrine\Common\Cache\ApcCache());
|
|
} else {
|
|
$this->markTestSkipped('Test only works with a cache enabled.');
|
|
}
|
|
|
|
try {
|
|
$this->_schemaTool->createSchema(array(
|
|
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC742User'),
|
|
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC742Comment')
|
|
));
|
|
} catch(\Exception $e) {
|
|
|
|
}
|
|
|
|
// make sure classes will be deserialized from caches
|
|
$this->_em->getMetadataFactory()->setMetadataFor(__NAMESPACE__ . '\DDC742User', null);
|
|
$this->_em->getMetadataFactory()->setMetadataFor(__NAMESPACE__ . '\DDC742Comment', null);
|
|
}
|
|
|
|
public function testIssue()
|
|
{
|
|
$user = new DDC742User();
|
|
$user->title = "Foo";
|
|
$user->favoriteComments = new ArrayCollection();
|
|
|
|
$comment1 = new DDC742Comment();
|
|
$comment1->content = "foo";
|
|
|
|
$comment2 = new DDC742Comment();
|
|
$comment2->content = "bar";
|
|
|
|
$comment3 = new DDC742Comment();
|
|
$comment3->content = "baz";
|
|
|
|
$user->favoriteComments->add($comment1);
|
|
$user->favoriteComments->add($comment2);
|
|
|
|
$this->_em->persist($user);
|
|
$this->_em->persist($comment1);
|
|
$this->_em->persist($comment2);
|
|
$this->_em->persist($comment3);
|
|
$this->_em->flush();
|
|
$this->_em->clear();
|
|
|
|
$user = $this->_em->find(get_class($user), $user->id);
|
|
$comment3 = $this->_em->find(get_class($comment3), $comment3->id);
|
|
$user->favoriteComments->add($comment3);
|
|
$this->_em->flush();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @Entity
|
|
* @Table(name="users")
|
|
*/
|
|
class DDC742User
|
|
{
|
|
/**
|
|
* User Id
|
|
*
|
|
* @Id
|
|
* @GeneratedValue(strategy="AUTO")
|
|
* @Column(type="integer")
|
|
* @var integer
|
|
*/
|
|
public $id;
|
|
/**
|
|
* @Column(length=100, type="string")
|
|
* @var string
|
|
*/
|
|
public $title;
|
|
/**
|
|
* @ManyToMany(targetEntity="DDC742Comment", cascade={"persist"}, fetch="EAGER")
|
|
* @JoinTable(
|
|
* name="user_comments",
|
|
* joinColumns={@JoinColumn(name="user_id",referencedColumnName="id")},
|
|
* inverseJoinColumns={@JoinColumn(name="comment_id", referencedColumnName="id")}
|
|
* )
|
|
*
|
|
* @var Doctrine\ORM\PersistentCollection
|
|
*/
|
|
public $favoriteComments;
|
|
}
|
|
|
|
/**
|
|
* @Entity
|
|
* @Table(name="comments")
|
|
*/
|
|
class DDC742Comment
|
|
{
|
|
/**
|
|
* User Id
|
|
*
|
|
* @Id
|
|
* @GeneratedValue(strategy="AUTO")
|
|
* @Column(type="integer")
|
|
* @var integer
|
|
*/
|
|
public $id;
|
|
/**
|
|
* @Column(length=100, type="string")
|
|
* @var string
|
|
*/
|
|
public $content;
|
|
}
|