DDC837Test.php 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <?php
  2. namespace Doctrine\Tests\ORM\Functional\Ticket;
  3. require_once __DIR__ . '/../../../TestInit.php';
  4. class DDC837Test extends \Doctrine\Tests\OrmFunctionalTestCase
  5. {
  6. protected function setUp()
  7. {
  8. parent::setUp();
  9. $this->_schemaTool->createSchema(array(
  10. $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC837Super'),
  11. $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC837Class1'),
  12. $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC837Class2'),
  13. $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC837Class3'),
  14. $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC837Aggregate'),
  15. ));
  16. }
  17. /**
  18. * @group DDC-837
  19. */
  20. public function testIssue()
  21. {
  22. //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger);
  23. $c1 = new DDC837Class1();
  24. $c1->title = "Foo";
  25. $c1->description = "Foo";
  26. $aggregate1 = new DDC837Aggregate('test1');
  27. $c1->aggregate = $aggregate1;
  28. $c2 = new DDC837Class2();
  29. $c2->title = "Bar";
  30. $c2->description = "Bar";
  31. $c2->text = "Bar";
  32. $aggregate2 = new DDC837Aggregate('test2');
  33. $c2->aggregate = $aggregate2;
  34. $c3 = new DDC837Class3();
  35. $c3->apples = "Baz";
  36. $c3->bananas = "Baz";
  37. $this->_em->persist($c1);
  38. $this->_em->persist($aggregate1);
  39. $this->_em->persist($c2);
  40. $this->_em->persist($aggregate2);
  41. $this->_em->persist($c3);
  42. $this->_em->flush();
  43. $this->_em->clear();
  44. // Test Class1
  45. $e1 = $this->_em->find('Doctrine\Tests\ORM\Functional\Ticket\DDC837Super', $c1->id);
  46. $this->assertInstanceOf('Doctrine\Tests\ORM\Functional\Ticket\DDC837Class1', $e1);
  47. $this->assertEquals('Foo', $e1->title);
  48. $this->assertEquals('Foo', $e1->description);
  49. $this->assertInstanceOf(__NAMESPACE__ . '\DDC837Aggregate', $e1->aggregate);
  50. $this->assertEquals('test1', $e1->aggregate->getSysname());
  51. // Test Class 2
  52. $e2 = $this->_em->find('Doctrine\Tests\ORM\Functional\Ticket\DDC837Super', $c2->id);
  53. $this->assertInstanceOf('Doctrine\Tests\ORM\Functional\Ticket\DDC837Class2', $e2);
  54. $this->assertEquals('Bar', $e2->title);
  55. $this->assertEquals('Bar', $e2->description);
  56. $this->assertEquals('Bar', $e2->text);
  57. $this->assertInstanceOf(__NAMESPACE__ . '\DDC837Aggregate', $e2->aggregate);
  58. $this->assertEquals('test2', $e2->aggregate->getSysname());
  59. $all = $this->_em->getRepository(__NAMESPACE__.'\DDC837Super')->findAll();
  60. foreach ($all as $obj) {
  61. if ($obj instanceof DDC837Class1) {
  62. $this->assertEquals('Foo', $obj->title);
  63. $this->assertEquals('Foo', $obj->description);
  64. } else if ($obj instanceof DDC837Class2) {
  65. $this->assertTrue($e2 === $obj);
  66. $this->assertEquals('Bar', $obj->title);
  67. $this->assertEquals('Bar', $obj->description);
  68. $this->assertEquals('Bar', $obj->text);
  69. } else if ($obj instanceof DDC837Class3) {
  70. $this->assertEquals('Baz', $obj->apples);
  71. $this->assertEquals('Baz', $obj->bananas);
  72. } else {
  73. $this->fail('Instance of DDC837Class1, DDC837Class2 or DDC837Class3 expected.');
  74. }
  75. }
  76. }
  77. }
  78. /**
  79. * @Entity
  80. * @Table(name="DDC837Super")
  81. * @InheritanceType("JOINED")
  82. * @DiscriminatorColumn(name="type", type="string")
  83. * @DiscriminatorMap({"class1" = "DDC837Class1", "class2" = "DDC837Class2", "class3"="DDC837Class3"})
  84. */
  85. abstract class DDC837Super
  86. {
  87. /**
  88. * @Id @Column(name="id", type="integer")
  89. * @GeneratedValue(strategy="AUTO")
  90. */
  91. public $id;
  92. }
  93. /**
  94. * @Entity
  95. */
  96. class DDC837Class1 extends DDC837Super
  97. {
  98. /**
  99. * @Column(name="title", type="string", length="150")
  100. */
  101. public $title;
  102. /**
  103. * @Column(name="content", type="string", length="500")
  104. */
  105. public $description;
  106. /**
  107. * @OneToOne(targetEntity="DDC837Aggregate")
  108. */
  109. public $aggregate;
  110. }
  111. /**
  112. * @Entity
  113. */
  114. class DDC837Class2 extends DDC837Super
  115. {
  116. /**
  117. * @Column(name="title", type="string", length="150")
  118. */
  119. public $title;
  120. /**
  121. * @Column(name="content", type="string", length="500")
  122. */
  123. public $description;
  124. /**
  125. * @Column(name="text", type="text")
  126. */
  127. public $text;
  128. /**
  129. * @OneToOne(targetEntity="DDC837Aggregate")
  130. */
  131. public $aggregate;
  132. }
  133. /**
  134. * An extra class to demonstrate why title and description aren't in Super
  135. *
  136. * @Entity
  137. */
  138. class DDC837Class3 extends DDC837Super
  139. {
  140. /**
  141. * @Column(name="title", type="string", length="150")
  142. */
  143. public $apples;
  144. /**
  145. * @Column(name="content", type="string", length="500")
  146. */
  147. public $bananas;
  148. }
  149. /**
  150. * @Entity
  151. */
  152. class DDC837Aggregate
  153. {
  154. /**
  155. * @Id @Column(name="id", type="integer")
  156. * @GeneratedValue
  157. */
  158. public $id;
  159. /**
  160. * @Column(name="sysname", type="string")
  161. */
  162. protected $sysname;
  163. public function __construct($sysname)
  164. {
  165. $this->sysname = $sysname;
  166. }
  167. public function getSysname()
  168. {
  169. return $this->sysname;
  170. }
  171. }