. */ namespace Doctrine\Tests\ORM\Functional; use Doctrine\ORM\Tools\ToolsException; use Doctrine\Tests\OrmFunctionalTestCase; class MergeSharedEntitiesTest extends OrmFunctionalTestCase { /** * {@inheritDoc} */ protected function setUp() { parent::setUp(); try { $this->_schemaTool->createSchema(array( $this->_em->getClassMetadata(__NAMESPACE__ . '\MSEFile'), $this->_em->getClassMetadata(__NAMESPACE__ . '\MSEPicture'), )); } catch (ToolsException $ignored) { } } public function testMergeSharedNewEntities() { $file = new MSEFile; $picture = new MSEPicture; $picture->file = $file; $picture->otherFile = $file; $picture = $this->_em->merge($picture); $this->assertEquals($picture->file, $picture->otherFile, 'Identical entities must remain identical'); } public function testMergeSharedManagedEntities() { $file = new MSEFile; $picture = new MSEPicture; $picture->file = $file; $picture->otherFile = $file; $this->_em->persist($file); $this->_em->persist($picture); $this->_em->flush(); $this->_em->clear(); $picture = $this->_em->merge($picture); $this->assertEquals($picture->file, $picture->otherFile, 'Identical entities must remain identical'); } public function testMergeSharedDetachedSerializedEntities() { $file = new MSEFile; $picture = new MSEPicture; $picture->file = $file; $picture->otherFile = $file; $serializedPicture = serialize($picture); $this->_em->persist($file); $this->_em->persist($picture); $this->_em->flush(); $this->_em->clear(); $picture = $this->_em->merge(unserialize($serializedPicture)); $this->assertEquals($picture->file, $picture->otherFile, 'Identical entities must remain identical'); } } /** @Entity */ class MSEPicture { /** @Column(type="integer") @Id @GeneratedValue */ public $id; /** @ManyToOne(targetEntity="MSEFile", cascade={"merge"}) */ public $file; /** @ManyToOne(targetEntity="MSEFile", cascade={"merge"}) */ public $otherFile; } /** @Entity */ class MSEFile { /** @Column(type="integer") @Id @GeneratedValue(strategy="AUTO") */ public $id; }