DDC1436Test.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. namespace Doctrine\Tests\ORM\Functional\Ticket;
  3. use Doctrine\ORM\UnitOfWork;
  4. /**
  5. * @group DDC-1436
  6. */
  7. class DDC1436Test extends \Doctrine\Tests\OrmFunctionalTestCase
  8. {
  9. protected function setUp()
  10. {
  11. parent::setUp();
  12. try {
  13. $this->_schemaTool->createSchema(array(
  14. $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC1436Page'),
  15. ));
  16. } catch (\Exception $ignored) {
  17. }
  18. }
  19. public function testIdentityMap()
  20. {
  21. // fixtures
  22. $parent = null;
  23. for ($i = 0; $i < 3; $i++) {
  24. $page = new DDC1436Page();
  25. $page->setParent($parent);
  26. $this->_em->persist($page);
  27. $parent = $page;
  28. }
  29. $this->_em->flush();
  30. $this->_em->clear();
  31. $id = $parent->getId();
  32. // step 1
  33. $page = $this->_em
  34. ->createQuery('SELECT p, parent FROM ' . __NAMESPACE__ . '\DDC1436Page p LEFT JOIN p.parent parent WHERE p.id = :id')
  35. ->setParameter('id', $id)
  36. ->getOneOrNullResult();
  37. $this->assertInstanceOf(__NAMESPACE__ . '\DDC1436Page', $page);
  38. // step 2
  39. $page = $this->_em->find(__NAMESPACE__ . '\DDC1436Page', $id);
  40. $this->assertInstanceOf(__NAMESPACE__ . '\DDC1436Page', $page);
  41. $this->assertInstanceOf(__NAMESPACE__ . '\DDC1436Page', $page->getParent());
  42. $this->assertInstanceOf(__NAMESPACE__ . '\DDC1436Page', $page->getParent()->getParent());
  43. }
  44. }
  45. /**
  46. * @Entity
  47. */
  48. class DDC1436Page
  49. {
  50. /**
  51. * @Id
  52. * @GeneratedValue
  53. * @Column(type="integer", name="id")
  54. */
  55. protected $id;
  56. /**
  57. * @ManyToOne(targetEntity="DDC1436Page")
  58. * @JoinColumn(name="pid", referencedColumnName="id")
  59. */
  60. protected $parent;
  61. public function getId()
  62. {
  63. return $this->id;
  64. }
  65. /**
  66. * @return DDC1436Page
  67. */
  68. public function getParent()
  69. {
  70. return $this->parent;
  71. }
  72. public function setParent($parent)
  73. {
  74. $this->parent = $parent;
  75. }
  76. }