-
-
Save doctrinebot/df8c531feb8b83b0db13 to your computer and use it in GitHub Desktop.
Attachments to Doctrine Jira Issue DDC-837 - https://github.com/doctrine/doctrine2/issues/5357
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace Doctrine\Tests\ORM\Functional\Ticket; | |
require_once __DIR__ . '/../../../TestInit.php'; | |
class DDC258Test extends \Doctrine\Tests\OrmFunctionalTestCase | |
{ | |
protected function setUp() | |
{ | |
parent::setUp(); | |
$this->_schemaTool->createSchema(array( | |
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC258Super'), | |
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC258Class1'), | |
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC258Class2'), | |
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC258Class3'), | |
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC258Aggregate'), | |
)); | |
} | |
/** | |
* @group DDC-258 | |
*/ | |
public function testIssue() | |
{ | |
$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); | |
$c1 = new DDC258Class1(); | |
$c1->title = "Foo"; | |
$c1->description = "Foo"; | |
$aggregate1 = new DDC258Aggregate('test1'); | |
$c1->aggregate = $aggregate1; | |
$c2 = new DDC258Class2(); | |
$c2->title = "Bar"; | |
$c2->description = "Bar"; | |
$c2->text = "Bar"; | |
$aggregate2 = new DDC258Aggregate('test2'); | |
$c2->aggregate = $aggregate2; | |
$c3 = new DDC258Class3(); | |
$c3->apples = "Baz"; | |
$c3->bananas = "Baz"; | |
$this->_em->persist($c1); | |
$this->_em->persist($aggregate1); | |
$this->_em->persist($c2); | |
$this->_em->persist($aggregate2); | |
$this->_em->persist($c3); | |
$this->_em->flush(); | |
$this->_em->clear(); | |
// Test Class1 | |
$e1 = $this->_em->find('Doctrine\Tests\ORM\Functional\Ticket\DDC258Super', $c1->id); | |
$this->assertType('Doctrine\Tests\ORM\Functional\Ticket\DDC258Class1', $e1); | |
$this->assertEquals('Foo', $e1->title); | |
$this->assertEquals('Foo', $e1->description); | |
$this->assertType(__NAMESPACE__ . '\DDC258Aggregate', $e1->aggregate); | |
$this->assertEquals('test1', $e1->aggregate->getSysname()); | |
// Test Class 2 | |
$e2 = $this->_em->find('Doctrine\Tests\ORM\Functional\Ticket\DDC258Super', $c2->id); | |
$this->assertType('Doctrine\Tests\ORM\Functional\Ticket\DDC258Class2', $e2); | |
$this->assertEquals('Bar', $e2->title); | |
$this->assertEquals('Bar', $e2->description); | |
$this->assertEquals('Bar', $e2->text); | |
$this->assertType(__NAMESPACE__ . '\DDC258Aggregate', $e2->aggregate); | |
$this->assertEquals('test2', $e2->aggregate->getSysname()); | |
$all = $this->_em->getRepository(__NAMESPACE__.'\DDC258Super')->findAll(); | |
foreach ($all as $obj) { | |
if ($obj instanceof DDC258Class1) { | |
$this->assertEquals('Foo', $obj->title); | |
$this->assertEquals('Foo', $obj->description); | |
} else if ($obj instanceof DDC258Class2) { | |
$this->assertTrue($e2 === $obj); | |
$this->assertEquals('Bar', $obj->title); | |
$this->assertEquals('Bar', $obj->description); | |
$this->assertEquals('Bar', $obj->text); | |
} else if ($obj instanceof DDC258Class3) { | |
$this->assertEquals('Baz', $obj->apples); | |
$this->assertEquals('Baz', $obj->bananas); | |
} else { | |
$this->fail('Instance of DDC258Class1, DDC258Class2 or DDC258Class3 expected.'); | |
} | |
} | |
} | |
} | |
/** | |
* @Entity | |
* @Table(name="DDC258Super") | |
* @InheritanceType("JOINED") | |
* @DiscriminatorColumn(name="type", type="string") | |
* @DiscriminatorMap({"class1" = "DDC258Class1", "class2" = "DDC258Class2", "class3"="DDC258Class3"}) | |
*/ | |
abstract class DDC258Super | |
{ | |
/** | |
* @Id @Column(name="id", type="integer") | |
* @GeneratedValue(strategy="AUTO") | |
*/ | |
public $id; | |
} | |
/** | |
* @Entity | |
*/ | |
class DDC258Class1 extends DDC258Super | |
{ | |
/** | |
* @Column(name="title", type="string", length="150") | |
*/ | |
public $title; | |
/** | |
* @Column(name="content", type="string", length="500") | |
*/ | |
public $description; | |
/** | |
* @OneToOne(targetEntity="DDC258Aggregate") | |
*/ | |
public $aggregate; | |
} | |
/** | |
* @Entity | |
*/ | |
class DDC258Class2 extends DDC258Super | |
{ | |
/** | |
* @Column(name="title", type="string", length="150") | |
*/ | |
public $title; | |
/** | |
* @Column(name="content", type="string", length="500") | |
*/ | |
public $description; | |
/** | |
* @Column(name="text", type="text") | |
*/ | |
public $text; | |
/** | |
* @OneToOne(targetEntity="DDC258Aggregate") | |
*/ | |
public $aggregate; | |
} | |
/** | |
* An extra class to demonstrate why title and description aren't in Super | |
* | |
* @Entity | |
*/ | |
class DDC258Class3 extends DDC258Super | |
{ | |
/** | |
* @Column(name="title", type="string", length="150") | |
*/ | |
public $apples; | |
/** | |
* @Column(name="content", type="string", length="500") | |
*/ | |
public $bananas; | |
} | |
/** | |
* @Entity | |
*/ | |
class DDC258Aggregate | |
{ | |
/** | |
* @Id @Column(name="id", type="integer") | |
* @GeneratedValue | |
*/ | |
public $id; | |
/** | |
* @Column(name="sysname", type="string") | |
*/ | |
protected $sysname; | |
public function __construct($sysname) | |
{ | |
$this->sysname = $sysname; | |
} | |
public function getSysname() | |
{ | |
return $this->sysname; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment