DDC1461Test.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. namespace Doctrine\Tests\ORM\Functional\Ticket;
  3. use Doctrine\Common\Collections\ArrayCollection;
  4. use Doctrine\Tests\Models\CMS\CmsArticle;
  5. use Doctrine\Tests\Models\CMS\CmsUser;
  6. require_once __DIR__ . '/../../../TestInit.php';
  7. /**
  8. * @group DDC-1461
  9. */
  10. class DDC1461Test extends \Doctrine\Tests\OrmFunctionalTestCase
  11. {
  12. public function setUp()
  13. {
  14. parent::setUp();
  15. try {
  16. $this->_schemaTool->createSchema(array(
  17. $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC1461TwitterAccount'),
  18. $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC1461User')
  19. ));
  20. } catch(\Exception $e) {
  21. }
  22. }
  23. public function testChangeDetectionDeferredExplicit()
  24. {
  25. $user = new DDC1461User;
  26. $this->_em->persist($user);
  27. $this->_em->flush();
  28. $this->assertEquals(\Doctrine\ORM\UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($user, \Doctrine\ORM\UnitOfWork::STATE_NEW), "Entity should be managed.");
  29. $this->assertEquals(\Doctrine\ORM\UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($user), "Entity should be managed.");
  30. $acc = new DDC1461TwitterAccount;
  31. $user->twitterAccount = $acc;
  32. $this->_em->persist($user);
  33. $this->_em->flush();
  34. $user = $this->_em->find(get_class($user), $user->id);
  35. $this->assertNotNull($user->twitterAccount);
  36. }
  37. }
  38. /**
  39. * @Entity
  40. * @ChangeTrackingPolicy("DEFERRED_EXPLICIT")
  41. */
  42. class DDC1461User
  43. {
  44. /**
  45. * @Id
  46. * @GeneratedValue(strategy="AUTO")
  47. * @Column(type="integer")
  48. */
  49. public $id;
  50. /**
  51. * @OneToOne(targetEntity="DDC1461TwitterAccount", orphanRemoval=true, fetch="EAGER", cascade = {"persist"}, inversedBy="user")
  52. * @var TwitterAccount
  53. */
  54. public $twitterAccount;
  55. }
  56. /**
  57. * @Entity
  58. * @ChangeTrackingPolicy("DEFERRED_EXPLICIT")
  59. */
  60. class DDC1461TwitterAccount
  61. {
  62. /**
  63. * @Id
  64. * @GeneratedValue(strategy="AUTO")
  65. * @Column(type="integer")
  66. */
  67. public $id;
  68. /**
  69. * @OneToOne(targetEntity="DDC1461User", fetch="EAGER")
  70. */
  71. public $user;
  72. }