123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- <?php
-
- namespace Doctrine\Tests\ORM\Functional;
-
- require_once __DIR__ . '/../../TestInit.php';
-
- /**
- * Functional tests for the Class Table Inheritance mapping strategy.
- *
- * @author robo
- */
- class ClassTableInheritanceTest2 extends \Doctrine\Tests\OrmFunctionalTestCase
- {
- protected function setUp() {
- parent::setUp();
- try {
- $this->_schemaTool->createSchema(array(
- $this->_em->getClassMetadata('Doctrine\Tests\ORM\Functional\CTIParent'),
- $this->_em->getClassMetadata('Doctrine\Tests\ORM\Functional\CTIChild'),
- $this->_em->getClassMetadata('Doctrine\Tests\ORM\Functional\CTIRelated'),
- $this->_em->getClassMetadata('Doctrine\Tests\ORM\Functional\CTIRelated2')
- ));
- } catch (\Exception $ignored) {
- // Swallow all exceptions. We do not test the schema tool here.
- }
- }
-
- public function testOneToOneAssocToBaseTypeBidirectional()
- {
- $child = new CTIChild;
- $child->setData('hello');
-
- $related = new CTIRelated;
- $related->setCTIParent($child);
-
- $this->_em->persist($related);
- $this->_em->persist($child);
-
- $this->_em->flush();
- $this->_em->clear();
-
- $relatedId = $related->getId();
-
- $related2 = $this->_em->find('Doctrine\Tests\ORM\Functional\CTIRelated', $relatedId);
-
- $this->assertTrue($related2 instanceof CTIRelated);
- $this->assertTrue($related2->getCTIParent() instanceof CTIChild);
- $this->assertFalse($related2->getCTIParent() instanceof \Doctrine\ORM\Proxy\Proxy);
- $this->assertEquals('hello', $related2->getCTIParent()->getData());
-
- $this->assertSame($related2, $related2->getCTIParent()->getRelated());
- }
-
- public function testManyToManyToCTIHierarchy()
- {
- //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger());
- $mmrel = new CTIRelated2;
- $child = new CTIChild;
- $child->setData('child');
- $mmrel->addCTIChild($child);
-
- $this->_em->persist($mmrel);
- $this->_em->persist($child);
-
- $this->_em->flush();
- $this->_em->clear();
-
- $mmrel2 = $this->_em->find(get_class($mmrel), $mmrel->getId());
- $this->assertFalse($mmrel2->getCTIChildren()->isInitialized());
- $this->assertEquals(1, count($mmrel2->getCTIChildren()));
- $this->assertTrue($mmrel2->getCTIChildren()->isInitialized());
- $this->assertTrue($mmrel2->getCTIChildren()->get(0) instanceof CTIChild);
- }
- }
-
- /**
- * @Entity @Table(name="cti_parents")
- * @InheritanceType("JOINED")
- * @DiscriminatorColumn(name="type", type="string")
- * @DiscriminatorMap({"parent" = "CTIParent", "child" = "CTIChild"})
- */
- class CTIParent {
- /**
- * @Id @Column(type="integer")
- * @GeneratedValue(strategy="AUTO")
- */
- private $id;
-
- /** @OneToOne(targetEntity="CTIRelated", mappedBy="ctiParent") */
- private $related;
-
- public function getId() {
- return $this->id;
- }
-
- public function getRelated() {
- return $this->related;
- }
-
- public function setRelated($related) {
- $this->related = $related;
- $related->setCTIParent($this);
- }
- }
-
- /**
- * @Entity @Table(name="cti_children")
- */
- class CTIChild extends CTIParent {
- /**
- * @Column(type="string")
- */
- private $data;
-
- public function getData() {
- return $this->data;
- }
-
- public function setData($data) {
- $this->data = $data;
- }
-
- }
-
- /** @Entity */
- class CTIRelated {
- /**
- * @Id @Column(type="integer")
- * @GeneratedValue(strategy="AUTO")
- */
- private $id;
-
- /**
- * @OneToOne(targetEntity="CTIParent")
- * @JoinColumn(name="ctiparent_id", referencedColumnName="id")
- */
- private $ctiParent;
-
- public function getId() {
- return $this->id;
- }
-
- public function getCTIParent() {
- return $this->ctiParent;
- }
-
- public function setCTIParent($ctiParent) {
- $this->ctiParent = $ctiParent;
- }
- }
-
- /** @Entity */
- class CTIRelated2
- {
- /** @Id @Column(type="integer") @GeneratedValue */
- private $id;
- /** @ManyToMany(targetEntity="CTIChild") */
- private $ctiChildren;
-
-
- public function __construct() {
- $this->ctiChildren = new \Doctrine\Common\Collections\ArrayCollection;
- }
-
- public function getId() {
- return $this->id;
- }
-
- public function addCTIChild(CTIChild $child) {
- $this->ctiChildren->add($child);
- }
-
- public function getCTIChildren() {
- return $this->ctiChildren;
- }
- }
|