3 namespace Doctrine\Tests\ORM\Functional\Ticket;
5 require_once __DIR__ . '/../../../TestInit.php';
7 class DDC345Test extends \Doctrine\Tests\OrmFunctionalTestCase
9 protected function setUp()
12 //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger);
13 $this->_schemaTool->createSchema(array(
14 $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC345User'),
15 $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC345Group'),
16 $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC345Membership'),
20 public function testTwoIterateHydrations()
23 $user = new DDC345User;
24 $user->name = 'Test User';
25 $this->_em->persist($user); // $em->flush() does not change much here
28 $group = new DDC345Group;
29 $group->name = 'Test Group';
30 $this->_em->persist($group); // $em->flush() does not change much here
32 $membership = new DDC345Membership;
33 $membership->group = $group;
34 $membership->user = $user;
35 $membership->state = 'active';
37 //$this->_em->persist($membership); // COMMENT OUT TO SEE BUG
39 This should be not necessary, but without, its PrePersist is called twice,
40 $membership seems to be persisted twice, but all properties but the
41 ones set by LifecycleCallbacks are deleted.
44 $user->Memberships->add($membership);
45 $group->Memberships->add($membership);
49 $this->assertEquals(1, $membership->prePersistCallCount);
50 $this->assertEquals(0, $membership->preUpdateCallCount);
51 $this->assertInstanceOf('DateTime', $membership->updated);
62 * @Column(type="integer")
67 /** @Column(type="string") */
70 /** @OneToMany(targetEntity="DDC345Membership", mappedBy="user", cascade={"persist"}) */
73 public function __construct()
75 $this->Memberships = new \Doctrine\Common\Collections\ArrayCollection;
86 * @Column(type="integer")
91 /** @Column(type="string") */
94 /** @OneToMany(targetEntity="DDC345Membership", mappedBy="group", cascade={"persist"}) */
98 public function __construct()
100 $this->Memberships = new \Doctrine\Common\Collections\ArrayCollection;
106 * @HasLifecycleCallbacks
107 * @Table(name="ddc345_memberships", uniqueConstraints={
108 * @UniqueConstraint(name="ddc345_memship_fks", columns={"user_id","group_id"})
111 class DDC345Membership
115 * @Column(type="integer")
121 * @OneToOne(targetEntity="DDC345User", inversedBy="Memberships")
122 * @JoinColumn(name="user_id", referencedColumnName="id", nullable=false)
127 * @OneToOne(targetEntity="DDC345Group", inversedBy="Memberships")
128 * @JoinColumn(name="group_id", referencedColumnName="id", nullable=false)
132 /** @Column(type="string") */
135 /** @Column(type="datetime") */
138 public $prePersistCallCount = 0;
139 public $preUpdateCallCount = 0;
142 public function doStuffOnPrePersist()
144 //echo "***** PrePersist\n";
145 ++$this->prePersistCallCount;
146 $this->updated = new \DateTime;
150 public function doStuffOnPreUpdate()
152 //echo "***** PreUpdate\n";
153 ++$this->preUpdateCallCount;
154 $this->updated = new \DateTime;