| 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;
 -     }
 - }
 
 
  |