PersistentCollectionTest.php 2.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <?php
  2. namespace Doctrine\Tests\ORM\Functional;
  3. use Doctrine\Common\Persistence\PersistentObject;
  4. /**
  5. */
  6. class PersistentCollectionTest extends \Doctrine\Tests\OrmFunctionalTestCase
  7. {
  8. protected function setUp()
  9. {
  10. parent::setUp();
  11. try {
  12. $this->_schemaTool->createSchema(array(
  13. $this->_em->getClassMetadata(__NAMESPACE__ . '\PersistentCollectionHolder'),
  14. $this->_em->getClassMetadata(__NAMESPACE__ . '\PersistentCollectionContent'),
  15. ));
  16. } catch (\Exception $e) {
  17. }
  18. }
  19. public function testPersist()
  20. {
  21. $collectionHolder = new PersistentCollectionHolder();
  22. $content = new PersistentCollectionContent('first element');
  23. $collectionHolder->addElement($content);
  24. $this->_em->persist($collectionHolder);
  25. $this->_em->flush();
  26. $this->_em->clear();
  27. $collectionHolder = $this->_em->find(__NAMESPACE__ . '\PersistentCollectionHolder', $collectionHolder->id);
  28. $collectionHolder->getCollection();
  29. $content = new PersistentCollectionContent('second element');
  30. $collectionHolder->addElement($content);
  31. $this->assertEquals(2, $collectionHolder->getCollection()->count());
  32. }
  33. }
  34. /**
  35. * @Entity
  36. */
  37. class PersistentCollectionHolder
  38. {
  39. /**
  40. * @Id @Column(type="integer") @GeneratedValue
  41. * @var int
  42. */
  43. public $id;
  44. /**
  45. * @var \Doctrine\Common\Collections\Collection
  46. * @ManyToMany(targetEntity="PersistentCollectionContent", cascade={"all"})
  47. * @JoinTable(name="pcholder_content_mm")
  48. */
  49. public $collection;
  50. public function __construct()
  51. {
  52. $this->collection = new \Doctrine\Common\Collections\ArrayCollection();
  53. }
  54. /**
  55. * @param PersistentCollectionContent $element
  56. */
  57. public function addElement(PersistentCollectionContent $element)
  58. {
  59. $this->collection->add($element);
  60. }
  61. /**
  62. * @return \Doctrine\Common\Collections\Collection
  63. */
  64. public function getCollection()
  65. {
  66. return clone $this->collection;
  67. }
  68. }
  69. /**
  70. * @Entity
  71. */
  72. class PersistentCollectionContent
  73. {
  74. /**
  75. * @Id @Column(type="integer") @GeneratedValue
  76. * @var int
  77. */
  78. public $id;
  79. }