2 namespace Doctrine\Tests\ORM\Functional\Ticket;
4 require_once __DIR__ . '/../../../TestInit.php';
6 class DDC258Test extends \Doctrine\Tests\OrmFunctionalTestCase
8 protected function setUp()
11 $this->_schemaTool->createSchema(array(
12 $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC258Super'),
13 $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC258Class1'),
14 $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC258Class2'),
15 $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC258Class3'),
22 public function testIssue()
24 //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger);
26 $c1 = new DDC258Class1();
28 $c1->description = "Foo";
30 $c2 = new DDC258Class2();
32 $c2->description = "Bar";
35 $c3 = new DDC258Class3();
39 $this->_em->persist($c1);
40 $this->_em->persist($c2);
41 $this->_em->persist($c3);
45 $e2 = $this->_em->find('Doctrine\Tests\ORM\Functional\Ticket\DDC258Super', $c2->id);
47 $this->assertInstanceOf('Doctrine\Tests\ORM\Functional\Ticket\DDC258Class2', $e2);
48 $this->assertEquals('Bar', $e2->title);
49 $this->assertEquals('Bar', $e2->description);
50 $this->assertEquals('Bar', $e2->text);
52 $all = $this->_em->getRepository(__NAMESPACE__.'\DDC258Super')->findAll();
54 foreach ($all as $obj) {
55 if ($obj instanceof DDC258Class1) {
56 $this->assertEquals('Foo', $obj->title);
57 $this->assertEquals('Foo', $obj->description);
58 } else if ($obj instanceof DDC258Class2) {
59 $this->assertTrue($e2 === $obj);
60 $this->assertEquals('Bar', $obj->title);
61 $this->assertEquals('Bar', $obj->description);
62 $this->assertEquals('Bar', $obj->text);
63 } else if ($obj instanceof DDC258Class3) {
64 $this->assertEquals('Baz', $obj->apples);
65 $this->assertEquals('Baz', $obj->bananas);
67 $this->fail('Instance of DDC258Class1, DDC258Class2 or DDC258Class3 expected.');
75 * @Table(name="DDC258Super")
76 * @InheritanceType("JOINED")
77 * @DiscriminatorColumn(name="type", type="string")
78 * @DiscriminatorMap({"class1" = "DDC258Class1", "class2" = "DDC258Class2", "class3"="DDC258Class3"})
80 abstract class DDC258Super
83 * @Id @Column(name="id", type="integer")
84 * @GeneratedValue(strategy="AUTO")
92 class DDC258Class1 extends DDC258Super
95 * @Column(name="title", type="string", length=150)
100 * @Column(name="content", type="string", length=500)
108 class DDC258Class2 extends DDC258Super
111 * @Column(name="title", type="string", length=150)
116 * @Column(name="content", type="string", length=500)
121 * @Column(name="text", type="text")
127 * An extra class to demonstrate why title and description aren't in Super
131 class DDC258Class3 extends DDC258Super
134 * @Column(name="title", type="string", length=150)
139 * @Column(name="content", type="string", length=500)