1
0
mirror of synced 2024-12-13 14:56:01 +03:00
doctrine2/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest2.php

129 lines
3.2 KiB
PHP

<?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')
));
} catch (\Exception $e) {
// 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());
}
}
/**
* @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;
}
}