123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- <?php
- namespace Doctrine\Tests\ORM\Functional\Ticket;
- /**
- * @group DDC-1655
- * @group DDC-1640
- * @group DDC-1556
- */
- class DDC1655Test extends \Doctrine\Tests\OrmFunctionalTestCase
- {
- public function setUp()
- {
- parent::setUp();
- try {
- $this->_schemaTool->createSchema(array(
- $this->_em->getClassMetadata(__NAMESPACE__ . '\\DDC1655Foo'),
- $this->_em->getClassMetadata(__NAMESPACE__ . '\\DDC1655Bar'),
- $this->_em->getClassMetadata(__NAMESPACE__ . '\\DDC1655Baz'),
- ));
- } catch(\Exception $e) {
- }
- }
- public function testPostLoadOneToManyInheritance()
- {
- $cm = $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC1655Foo');
- $this->assertEquals(array("postLoad" => array("postLoad")), $cm->lifecycleCallbacks);
- $cm = $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC1655Bar');
- $this->assertEquals(array("postLoad" => array("postLoad", "postSubLoaded")), $cm->lifecycleCallbacks);
- $baz = new DDC1655Baz();
- $foo = new DDC1655Foo();
- $foo->baz = $baz;
- $bar = new DDC1655Bar();
- $bar->baz = $baz;
- $this->_em->persist($foo);
- $this->_em->persist($bar);
- $this->_em->persist($baz);
- $this->_em->flush();
- $this->_em->clear();
- $baz = $this->_em->find(get_class($baz), $baz->id);
- foreach ($baz->foos as $foo) {
- $this->assertEquals(1, $foo->loaded, "should have loaded callback counter incremented for " . get_class($foo));
- }
- }
- /**
- * Check that post load is not executed several times when the entity
- * is rehydrated again although its already known.
- */
- public function testPostLoadInheritanceChild()
- {
- $bar = new DDC1655Bar();
- $this->_em->persist($bar);
- $this->_em->flush();
- $this->_em->clear();
- $bar = $this->_em->find(get_class($bar), $bar->id);
- $this->assertEquals(1, $bar->loaded);
- $this->assertEquals(1, $bar->subLoaded);
- $bar = $this->_em->find(get_class($bar), $bar->id);
- $this->assertEquals(1, $bar->loaded);
- $this->assertEquals(1, $bar->subLoaded);
- $dql = "SELECT b FROM " . __NAMESPACE__ . "\DDC1655Bar b WHERE b.id = ?1";
- $bar = $this->_em->createQuery($dql)->setParameter(1, $bar->id)->getSingleResult();
- $this->assertEquals(1, $bar->loaded);
- $this->assertEquals(1, $bar->subLoaded);
- $this->_em->refresh($bar);
- $this->assertEquals(2, $bar->loaded);
- $this->assertEquals(2, $bar->subLoaded);
- }
- }
- /**
- * @Entity
- * @InheritanceType("SINGLE_TABLE")
- * @DiscriminatorMap({
- * "foo" = "DDC1655Foo",
- * "bar" = "DDC1655Bar"
- * })
- * @HasLifecycleCallbacks
- */
- class DDC1655Foo
- {
- /** @Id @GeneratedValue @Column(type="integer") */
- public $id;
- public $loaded = 0;
- /**
- * @ManyToOne(targetEntity="DDC1655Baz", inversedBy="foos")
- */
- public $baz;
- /**
- * @PostLoad
- */
- public function postLoad()
- {
- $this->loaded++;
- }
- }
- /**
- * @Entity
- * @HasLifecycleCallbacks
- */
- class DDC1655Bar extends DDC1655Foo
- {
- public $subLoaded;
- /**
- * @PostLoad
- */
- public function postSubLoaded()
- {
- $this->subLoaded++;
- }
- }
- /**
- * @Entity
- */
- class DDC1655Baz
- {
- /** @Id @GeneratedValue @Column(type="integer") */
- public $id;
- /**
- * @OneToMany(targetEntity="DDC1655Foo", mappedBy="baz")
- */
- public $foos = array();
- }
|