DDC199Test.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. namespace Doctrine\Tests\ORM\Functional\Ticket;
  3. require_once __DIR__ . '/../../../TestInit.php';
  4. class DDC199Test extends \Doctrine\Tests\OrmFunctionalTestCase
  5. {
  6. protected function setUp()
  7. {
  8. parent::setUp();
  9. $this->_schemaTool->createSchema(array(
  10. $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC199ParentClass'),
  11. $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC199ChildClass'),
  12. $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC199RelatedClass')
  13. ));
  14. }
  15. public function testPolymorphicLoading()
  16. {
  17. $child = new DDC199ChildClass;
  18. $child->parentData = 'parentData';
  19. $child->childData = 'childData';
  20. $this->_em->persist($child);
  21. $related1 = new DDC199RelatedClass;
  22. $related1->relatedData = 'related1';
  23. $related1->parent = $child;
  24. $this->_em->persist($related1);
  25. $related2 = new DDC199RelatedClass;
  26. $related2->relatedData = 'related2';
  27. $related2->parent = $child;
  28. $this->_em->persist($related2);
  29. $this->_em->flush();
  30. $this->_em->clear();
  31. $query = $this->_em->createQuery('select e,r from Doctrine\Tests\ORM\Functional\Ticket\DDC199ParentClass e join e.relatedEntities r');
  32. $result = $query->getResult();
  33. $this->assertEquals(1, count($result));
  34. $this->assertInstanceOf('Doctrine\Tests\ORM\Functional\Ticket\DDC199ParentClass', $result[0]);
  35. $this->assertTrue($result[0]->relatedEntities->isInitialized());
  36. $this->assertEquals(2, $result[0]->relatedEntities->count());
  37. $this->assertInstanceOf('Doctrine\Tests\ORM\Functional\Ticket\DDC199RelatedClass', $result[0]->relatedEntities[0]);
  38. $this->assertInstanceOf('Doctrine\Tests\ORM\Functional\Ticket\DDC199RelatedClass', $result[0]->relatedEntities[1]);
  39. }
  40. }
  41. /**
  42. * @Entity @Table(name="ddc199_entities")
  43. * @InheritanceType("SINGLE_TABLE")
  44. * @DiscriminatorColumn(name="discr", type="string")
  45. * @DiscriminatorMap({"parent" = "DDC199ParentClass", "child" = "DDC199ChildClass"})
  46. */
  47. class DDC199ParentClass
  48. {
  49. /**
  50. * @Id @Column(type="integer")
  51. * @GeneratedValue(strategy="AUTO")
  52. */
  53. public $id;
  54. /**
  55. * @Column(type="string")
  56. */
  57. public $parentData;
  58. /**
  59. * @OneToMany(targetEntity="DDC199RelatedClass", mappedBy="parent")
  60. */
  61. public $relatedEntities;
  62. }
  63. /** @Entity */
  64. class DDC199ChildClass extends DDC199ParentClass
  65. {
  66. /**
  67. * @Column
  68. */
  69. public $childData;
  70. }
  71. /** @Entity @Table(name="ddc199_relatedclass") */
  72. class DDC199RelatedClass
  73. {
  74. /** @Id @Column(type="integer") @GeneratedValue */
  75. public $id;
  76. /** @Column */
  77. public $relatedData;
  78. /**
  79. * @ManyToOne(targetEntity="DDC199ParentClass", inversedBy="relatedEntities")
  80. * @JoinColumn(name="parent_id", referencedColumnName="id")
  81. */
  82. public $parent;
  83. }