Skip to content

Instantly share code, notes, and snippets.

@doctrinebot
Created December 13, 2015 18:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save doctrinebot/df8c531feb8b83b0db13 to your computer and use it in GitHub Desktop.
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
<?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