3 namespace Doctrine\Tests\ORM\Functional;
5 require_once __DIR__ . '/../../TestInit.php';
8 * Functional tests for the Class Table Inheritance mapping strategy.
12 class ClassTableInheritanceTest2 extends \Doctrine\Tests\OrmFunctionalTestCase
14 protected function setUp() {
17 $this->_schemaTool->createSchema(array(
18 $this->_em->getClassMetadata('Doctrine\Tests\ORM\Functional\CTIParent'),
19 $this->_em->getClassMetadata('Doctrine\Tests\ORM\Functional\CTIChild'),
20 $this->_em->getClassMetadata('Doctrine\Tests\ORM\Functional\CTIRelated'),
21 $this->_em->getClassMetadata('Doctrine\Tests\ORM\Functional\CTIRelated2')
23 } catch (\Exception $ignored) {
24 // Swallow all exceptions. We do not test the schema tool here.
28 public function testOneToOneAssocToBaseTypeBidirectional()
30 $child = new CTIChild;
31 $child->setData('hello');
33 $related = new CTIRelated;
34 $related->setCTIParent($child);
36 $this->_em->persist($related);
37 $this->_em->persist($child);
42 $relatedId = $related->getId();
44 $related2 = $this->_em->find('Doctrine\Tests\ORM\Functional\CTIRelated', $relatedId);
46 $this->assertInstanceOf('Doctrine\Tests\ORM\Functional\CTIRelated', $related2);
47 $this->assertInstanceOf('Doctrine\Tests\ORM\Functional\CTIChild', $related2->getCTIParent());
48 $this->assertNotInstanceOf('Doctrine\ORM\Proxy\Proxy', $related2->getCTIParent());
49 $this->assertEquals('hello', $related2->getCTIParent()->getData());
51 $this->assertSame($related2, $related2->getCTIParent()->getRelated());
54 public function testManyToManyToCTIHierarchy()
56 //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger());
57 $mmrel = new CTIRelated2;
58 $child = new CTIChild;
59 $child->setData('child');
60 $mmrel->addCTIChild($child);
62 $this->_em->persist($mmrel);
63 $this->_em->persist($child);
68 $mmrel2 = $this->_em->find(get_class($mmrel), $mmrel->getId());
69 $this->assertFalse($mmrel2->getCTIChildren()->isInitialized());
70 $this->assertEquals(1, count($mmrel2->getCTIChildren()));
71 $this->assertTrue($mmrel2->getCTIChildren()->isInitialized());
72 $this->assertInstanceOf('Doctrine\Tests\ORM\Functional\CTIChild', $mmrel2->getCTIChildren()->get(0));
77 * @Entity @Table(name="cti_parents")
78 * @InheritanceType("JOINED")
79 * @DiscriminatorColumn(name="type", type="string")
80 * @DiscriminatorMap({"parent" = "CTIParent", "child" = "CTIChild"})
84 * @Id @Column(type="integer")
85 * @GeneratedValue(strategy="AUTO")
89 /** @OneToOne(targetEntity="CTIRelated", mappedBy="ctiParent") */
92 public function getId() {
96 public function getRelated() {
97 return $this->related;
100 public function setRelated($related) {
101 $this->related = $related;
102 $related->setCTIParent($this);
107 * @Entity @Table(name="cti_children")
109 class CTIChild extends CTIParent {
111 * @Column(type="string")
115 public function getData() {
119 public function setData($data) {
128 * @Id @Column(type="integer")
129 * @GeneratedValue(strategy="AUTO")
134 * @OneToOne(targetEntity="CTIParent")
135 * @JoinColumn(name="ctiparent_id", referencedColumnName="id")
139 public function getId() {
143 public function getCTIParent() {
144 return $this->ctiParent;
147 public function setCTIParent($ctiParent) {
148 $this->ctiParent = $ctiParent;
155 /** @Id @Column(type="integer") @GeneratedValue */
157 /** @ManyToMany(targetEntity="CTIChild") */
158 private $ctiChildren;
161 public function __construct() {
162 $this->ctiChildren = new \Doctrine\Common\Collections\ArrayCollection;
165 public function getId() {
169 public function addCTIChild(CTIChild $child) {
170 $this->ctiChildren->add($child);
173 public function getCTIChildren() {
174 return $this->ctiChildren;