diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneSingleTableInheritanceTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneSingleTableInheritanceTest.php new file mode 100644 index 000000000..0411299de --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneSingleTableInheritanceTest.php @@ -0,0 +1,81 @@ +useModelSet('ecommerce'); + + parent::setUp(); + + $this->_schemaTool->createSchema([ + $this->_em->getClassMetadata(Pet::CLASSNAME), + $this->_em->getClassMetadata(Cat::CLASSNAME), + $this->_em->getClassMetadata(LitterBox::CLASSNAME), + ]); + } + + public function testFindFromOneToOneOwningSideJoinedTableInheritance() + { + $cat = new Cat(); + $cat->litterBox = new LitterBox(); + + $this->_em->persist($cat); + $this->_em->persist($cat->litterBox); + $this->_em->flush(); + $this->_em->clear(); + + /* @var $foundCat Cat */ + $foundCat = $this->_em->find(Pet::CLASSNAME, $cat->id); + + $this->assertInstanceOf(Cat::CLASSNAME, $foundCat); + $this->assertSame($cat->id, $foundCat->id); + $this->assertInstanceOf(LitterBox::CLASSNAME, $foundCat->litterBox); + $this->assertSame($cat->litterBox->id, $foundCat->litterBox->id); + + } +} + +/** @Entity @InheritanceType("SINGLE_TABLE") @DiscriminatorMap({"cat" = "Cat"}) */ +abstract class Pet +{ + const CLASSNAME = __CLASS__; + + /** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */ + public $id; +} + +/** @Entity */ +class Cat extends Pet +{ + const CLASSNAME = __CLASS__; + + /** + * @OneToOne(targetEntity="LitterBox") + * + * @var LitterBox + */ + public $litterBox; +} + +/** @Entity */ +class LitterBox +{ + const CLASSNAME = __CLASS__; + + /** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */ + public $id; +}