DDC1595Test.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <?php
  2. namespace Doctrine\Tests\ORM\Functional\Ticket;
  3. /**
  4. * @group DDC-1595
  5. * @group DDC-1596
  6. */
  7. class DDC1595Test extends \Doctrine\Tests\OrmFunctionalTestCase
  8. {
  9. public function setUp()
  10. {
  11. parent::setUp();
  12. $this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\DebugStack);
  13. $this->_schemaTool->createSchema(array(
  14. $this->_em->getClassMetadata(__NAMESPACE__ . '\\DDC1595BaseInheritance'),
  15. $this->_em->getClassMetadata(__NAMESPACE__ . '\\DDC1595InheritedEntity1'),
  16. $this->_em->getClassMetadata(__NAMESPACE__ . '\\DDC1595InheritedEntity2'),
  17. ));
  18. }
  19. public function testIssue()
  20. {
  21. $e1 = new DDC1595InheritedEntity1();
  22. $this->_em->persist($e1);
  23. $this->_em->flush();
  24. $this->_em->clear();
  25. $sqlLogger = $this->_em->getConnection()->getConfiguration()->getSQLLogger();
  26. $repository = $this->_em->getRepository(__NAMESPACE__ . '\\DDC1595InheritedEntity1');
  27. $entity1 = $repository->find($e1->id);
  28. // DDC-1596
  29. $this->assertSQLEquals(
  30. "SELECT t0.id AS id1, t0.type FROM base t0 WHERE t0.id = ? AND t0.type IN ('Entity1')",
  31. $sqlLogger->queries[count($sqlLogger->queries)]['sql']
  32. );
  33. $entities = $entity1->getEntities()->getValues();
  34. $this->assertSQLEquals(
  35. "SELECT t0.id AS id1, t0.type FROM base t0 INNER JOIN entity1_entity2 ON t0.id = entity1_entity2.item WHERE entity1_entity2.parent = ? AND t0.type IN ('Entity2')",
  36. $sqlLogger->queries[count($sqlLogger->queries)]['sql']
  37. );
  38. $this->_em->clear();
  39. $entity1 = $repository->find($e1->id);
  40. $entities = $entity1->getEntities()->count();
  41. $this->assertSQLEquals(
  42. "SELECT COUNT(*) FROM entity1_entity2 t WHERE parent = ?",
  43. $sqlLogger->queries[count($sqlLogger->queries)]['sql']
  44. );
  45. }
  46. }
  47. /**
  48. * @Entity
  49. * @Table(name="base")
  50. *
  51. * @InheritanceType("SINGLE_TABLE")
  52. * @DiscriminatorColumn(name="type", type="string")
  53. * @DiscriminatorMap({
  54. * "Entity1" = "DDC1595InheritedEntity1",
  55. * "Entity2" = "DDC1595InheritedEntity2"
  56. * })
  57. */
  58. abstract class DDC1595BaseInheritance
  59. {
  60. /**
  61. * @Id @GeneratedValue
  62. * @Column(type="integer")
  63. *
  64. * @var integer
  65. */
  66. public $id;
  67. }
  68. /**
  69. * @Entity
  70. * @Table(name="entity1")
  71. */
  72. class DDC1595InheritedEntity1 extends DDC1595BaseInheritance
  73. {
  74. /**
  75. * @ManyToMany(targetEntity="DDC1595InheritedEntity2", fetch="EXTRA_LAZY")
  76. * @JoinTable(name="entity1_entity2",
  77. * joinColumns={@JoinColumn(name="parent", referencedColumnName="id")},
  78. * inverseJoinColumns={@JoinColumn(name="item", referencedColumnName="id")}
  79. * )
  80. */
  81. protected $entities;
  82. public function getEntities()
  83. {
  84. return $this->entities;
  85. }
  86. }
  87. /**
  88. * @Entity
  89. * @Table(name="entity2")
  90. */
  91. class DDC1595InheritedEntity2 extends DDC1595BaseInheritance
  92. {
  93. }