DDC258Test.php 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <?php
  2. namespace Doctrine\Tests\ORM\Functional\Ticket;
  3. require_once __DIR__ . '/../../../TestInit.php';
  4. class DDC258Test extends \Doctrine\Tests\OrmFunctionalTestCase
  5. {
  6. protected function setUp()
  7. {
  8. parent::setUp();
  9. $this->_schemaTool->createSchema(array(
  10. $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC258Super'),
  11. $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC258Class1'),
  12. $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC258Class2'),
  13. $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC258Class3'),
  14. ));
  15. }
  16. /**
  17. * @group DDC-258
  18. */
  19. public function testIssue()
  20. {
  21. //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger);
  22. $c1 = new DDC258Class1();
  23. $c1->title = "Foo";
  24. $c1->description = "Foo";
  25. $c2 = new DDC258Class2();
  26. $c2->title = "Bar";
  27. $c2->description = "Bar";
  28. $c2->text = "Bar";
  29. $c3 = new DDC258Class3();
  30. $c3->apples = "Baz";
  31. $c3->bananas = "Baz";
  32. $this->_em->persist($c1);
  33. $this->_em->persist($c2);
  34. $this->_em->persist($c3);
  35. $this->_em->flush();
  36. $this->_em->clear();
  37. $e2 = $this->_em->find('Doctrine\Tests\ORM\Functional\Ticket\DDC258Super', $c2->id);
  38. $this->assertInstanceOf('Doctrine\Tests\ORM\Functional\Ticket\DDC258Class2', $e2);
  39. $this->assertEquals('Bar', $e2->title);
  40. $this->assertEquals('Bar', $e2->description);
  41. $this->assertEquals('Bar', $e2->text);
  42. $all = $this->_em->getRepository(__NAMESPACE__.'\DDC258Super')->findAll();
  43. foreach ($all as $obj) {
  44. if ($obj instanceof DDC258Class1) {
  45. $this->assertEquals('Foo', $obj->title);
  46. $this->assertEquals('Foo', $obj->description);
  47. } else if ($obj instanceof DDC258Class2) {
  48. $this->assertTrue($e2 === $obj);
  49. $this->assertEquals('Bar', $obj->title);
  50. $this->assertEquals('Bar', $obj->description);
  51. $this->assertEquals('Bar', $obj->text);
  52. } else if ($obj instanceof DDC258Class3) {
  53. $this->assertEquals('Baz', $obj->apples);
  54. $this->assertEquals('Baz', $obj->bananas);
  55. } else {
  56. $this->fail('Instance of DDC258Class1, DDC258Class2 or DDC258Class3 expected.');
  57. }
  58. }
  59. }
  60. }
  61. /**
  62. * @Entity
  63. * @Table(name="DDC258Super")
  64. * @InheritanceType("JOINED")
  65. * @DiscriminatorColumn(name="type", type="string")
  66. * @DiscriminatorMap({"class1" = "DDC258Class1", "class2" = "DDC258Class2", "class3"="DDC258Class3"})
  67. */
  68. abstract class DDC258Super
  69. {
  70. /**
  71. * @Id @Column(name="id", type="integer")
  72. * @GeneratedValue(strategy="AUTO")
  73. */
  74. public $id;
  75. }
  76. /**
  77. * @Entity
  78. */
  79. class DDC258Class1 extends DDC258Super
  80. {
  81. /**
  82. * @Column(name="title", type="string", length="150")
  83. */
  84. public $title;
  85. /**
  86. * @Column(name="content", type="string", length="500")
  87. */
  88. public $description;
  89. }
  90. /**
  91. * @Entity
  92. */
  93. class DDC258Class2 extends DDC258Super
  94. {
  95. /**
  96. * @Column(name="title", type="string", length="150")
  97. */
  98. public $title;
  99. /**
  100. * @Column(name="content", type="string", length="500")
  101. */
  102. public $description;
  103. /**
  104. * @Column(name="text", type="text")
  105. */
  106. public $text;
  107. }
  108. /**
  109. * An extra class to demonstrate why title and description aren't in Super
  110. *
  111. * @Entity
  112. */
  113. class DDC258Class3 extends DDC258Super
  114. {
  115. /**
  116. * @Column(name="title", type="string", length="150")
  117. */
  118. public $apples;
  119. /**
  120. * @Column(name="content", type="string", length="500")
  121. */
  122. public $bananas;
  123. }