2 namespace Doctrine\Tests\ORM\Functional\Ticket;
4 require_once __DIR__ . '/../../../TestInit.php';
6 class DDC837Test extends \Doctrine\Tests\OrmFunctionalTestCase
8 protected function setUp()
11 $this->_schemaTool->createSchema(array(
12 $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC837Super'),
13 $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC837Class1'),
14 $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC837Class2'),
15 $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC837Class3'),
16 $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC837Aggregate'),
23 public function testIssue()
25 //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger);
27 $c1 = new DDC837Class1();
29 $c1->description = "Foo";
30 $aggregate1 = new DDC837Aggregate('test1');
31 $c1->aggregate = $aggregate1;
33 $c2 = new DDC837Class2();
35 $c2->description = "Bar";
37 $aggregate2 = new DDC837Aggregate('test2');
38 $c2->aggregate = $aggregate2;
40 $c3 = new DDC837Class3();
44 $this->_em->persist($c1);
45 $this->_em->persist($aggregate1);
46 $this->_em->persist($c2);
47 $this->_em->persist($aggregate2);
48 $this->_em->persist($c3);
53 $e1 = $this->_em->find('Doctrine\Tests\ORM\Functional\Ticket\DDC837Super', $c1->id);
55 $this->assertInstanceOf('Doctrine\Tests\ORM\Functional\Ticket\DDC837Class1', $e1);
56 $this->assertEquals('Foo', $e1->title);
57 $this->assertEquals('Foo', $e1->description);
58 $this->assertInstanceOf(__NAMESPACE__ . '\DDC837Aggregate', $e1->aggregate);
59 $this->assertEquals('test1', $e1->aggregate->getSysname());
62 $e2 = $this->_em->find('Doctrine\Tests\ORM\Functional\Ticket\DDC837Super', $c2->id);
64 $this->assertInstanceOf('Doctrine\Tests\ORM\Functional\Ticket\DDC837Class2', $e2);
65 $this->assertEquals('Bar', $e2->title);
66 $this->assertEquals('Bar', $e2->description);
67 $this->assertEquals('Bar', $e2->text);
68 $this->assertInstanceOf(__NAMESPACE__ . '\DDC837Aggregate', $e2->aggregate);
69 $this->assertEquals('test2', $e2->aggregate->getSysname());
71 $all = $this->_em->getRepository(__NAMESPACE__.'\DDC837Super')->findAll();
73 foreach ($all as $obj) {
74 if ($obj instanceof DDC837Class1) {
75 $this->assertEquals('Foo', $obj->title);
76 $this->assertEquals('Foo', $obj->description);
77 } else if ($obj instanceof DDC837Class2) {
78 $this->assertTrue($e2 === $obj);
79 $this->assertEquals('Bar', $obj->title);
80 $this->assertEquals('Bar', $obj->description);
81 $this->assertEquals('Bar', $obj->text);
82 } else if ($obj instanceof DDC837Class3) {
83 $this->assertEquals('Baz', $obj->apples);
84 $this->assertEquals('Baz', $obj->bananas);
86 $this->fail('Instance of DDC837Class1, DDC837Class2 or DDC837Class3 expected.');
94 * @Table(name="DDC837Super")
95 * @InheritanceType("JOINED")
96 * @DiscriminatorColumn(name="type", type="string")
97 * @DiscriminatorMap({"class1" = "DDC837Class1", "class2" = "DDC837Class2", "class3"="DDC837Class3"})
99 abstract class DDC837Super
102 * @Id @Column(name="id", type="integer")
103 * @GeneratedValue(strategy="AUTO")
111 class DDC837Class1 extends DDC837Super
114 * @Column(name="title", type="string", length=150)
119 * @Column(name="content", type="string", length=500)
124 * @OneToOne(targetEntity="DDC837Aggregate")
132 class DDC837Class2 extends DDC837Super
135 * @Column(name="title", type="string", length=150)
140 * @Column(name="content", type="string", length=500)
145 * @Column(name="text", type="text")
150 * @OneToOne(targetEntity="DDC837Aggregate")
156 * An extra class to demonstrate why title and description aren't in Super
160 class DDC837Class3 extends DDC837Super
163 * @Column(name="title", type="string", length=150)
168 * @Column(name="content", type="string", length=500)
176 class DDC837Aggregate
179 * @Id @Column(name="id", type="integer")
185 * @Column(name="sysname", type="string")
189 public function __construct($sysname)
191 $this->sysname = $sysname;
194 public function getSysname()
196 return $this->sysname;