DDC809Test.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. namespace Doctrine\Tests\ORM\Functional\Ticket;
  3. use Doctrine\Common\Collections\ArrayCollection;
  4. use Doctrine\Tests\Models\CMS\CmsUser;
  5. use Doctrine\Tests\Models\CMS\CmsGroup;
  6. require_once __DIR__ . '/../../../TestInit.php';
  7. class DDC809Test extends \Doctrine\Tests\OrmFunctionalTestCase
  8. {
  9. public function setUp()
  10. {
  11. parent::setUp();
  12. $this->_schemaTool->createSchema(array(
  13. $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC809Variant'),
  14. $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC809SpecificationValue')
  15. ));
  16. $conn = $this->_em->getConnection();
  17. $conn->insert('specification_value_test', array('specification_value_id' => 94589));
  18. $conn->insert('specification_value_test', array('specification_value_id' => 94593));
  19. $conn->insert('specification_value_test', array('specification_value_id' => 94606));
  20. $conn->insert('specification_value_test', array('specification_value_id' => 94607));
  21. $conn->insert('specification_value_test', array('specification_value_id' => 94609));
  22. $conn->insert('specification_value_test', array('specification_value_id' => 94711));
  23. $conn->insert('variant_test', array('variant_id' => 545208));
  24. $conn->insert('variant_test', array('variant_id' => 545209));
  25. $conn->insert('var_spec_value_test', array('variant_id' => 545208, 'specification_value_id' => 94606));
  26. $conn->insert('var_spec_value_test', array('variant_id' => 545208, 'specification_value_id' => 94607));
  27. $conn->insert('var_spec_value_test', array('variant_id' => 545208, 'specification_value_id' => 94609));
  28. $conn->insert('var_spec_value_test', array('variant_id' => 545208, 'specification_value_id' => 94711));
  29. $conn->insert('var_spec_value_test', array('variant_id' => 545209, 'specification_value_id' => 94589));
  30. $conn->insert('var_spec_value_test', array('variant_id' => 545209, 'specification_value_id' => 94593));
  31. $conn->insert('var_spec_value_test', array('variant_id' => 545209, 'specification_value_id' => 94606));
  32. $conn->insert('var_spec_value_test', array('variant_id' => 545209, 'specification_value_id' => 94607));
  33. }
  34. /**
  35. * @group DDC-809
  36. */
  37. public function testIssue()
  38. {
  39. $result = $this->_em->createQueryBuilder()
  40. ->select('Variant, SpecificationValue')
  41. ->from('Doctrine\Tests\ORM\Functional\Ticket\DDC809Variant', 'Variant')
  42. ->leftJoin('Variant.SpecificationValues', 'SpecificationValue')
  43. ->getQuery()
  44. ->getResult();
  45. $this->assertEquals(4, count($result[0]->getSpecificationValues()), "Works in test-setup.");
  46. $this->assertEquals(4, count($result[1]->getSpecificationValues()), "Only returns 2 in the case of the hydration bug.");
  47. }
  48. }
  49. /**
  50. * @Table(name="variant_test")
  51. * @Entity
  52. */
  53. class DDC809Variant
  54. {
  55. /**
  56. * @Column(name="variant_id", type="integer")
  57. * @Id
  58. */
  59. protected $variantId;
  60. /**
  61. * @ManyToMany(targetEntity="DDC809SpecificationValue", inversedBy="Variants")
  62. * @JoinTable(name="var_spec_value_test",
  63. * joinColumns={
  64. * @JoinColumn(name="variant_id", referencedColumnName="variant_id")
  65. * },
  66. * inverseJoinColumns={
  67. * @JoinColumn(name="specification_value_id", referencedColumnName="specification_value_id")
  68. * }
  69. * )
  70. */
  71. protected $SpecificationValues;
  72. public function getSpecificationValues()
  73. {
  74. return $this->SpecificationValues;
  75. }
  76. }
  77. /**
  78. * @Table(name="specification_value_test")
  79. * @Entity
  80. */
  81. class DDC809SpecificationValue
  82. {
  83. /**
  84. * @Column(name="specification_value_id", type="integer")
  85. * @Id
  86. */
  87. protected $specificationValueId;
  88. /**
  89. * @var Variant
  90. *
  91. * @ManyToMany(targetEntity="DDC809Variant", mappedBy="SpecificationValues")
  92. */
  93. protected $Variants;
  94. }