From d48093886dfd77e5856c99c253c0e63b5d5dc50e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anderson=20M=C3=BCller?= Date: Sun, 18 Jan 2015 15:54:43 +0100 Subject: [PATCH 1/4] Fix error undefined index "targetEntity" --- lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php index 574cb371e..23ebdf2d2 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php @@ -90,14 +90,14 @@ class SingleTablePersister extends AbstractEntityInheritancePersister foreach ($assoc['targetToSourceKeyColumns'] as $srcColumn) { $className = isset($assoc['inherited']) ? $assoc['inherited'] : $this->class->name; - $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); + $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); $columnList[] = $this->getSelectJoinColumnSQL( $tableAlias, $srcColumn, $className, PersisterHelper::getTypeOfColumn( - $mapping['sourceToTargetKeyColumns'][$srcColumn], + $assoc['sourceToTargetKeyColumns'][$srcColumn], $targetClass, $this->em ) From bffc99a1160c276d89ef0bf194a7ae45332a776a Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Sun, 18 Jan 2015 18:13:15 +0100 Subject: [PATCH 2/4] #1265 DDC-3517 - failing test - finding via a STI root class fails if there is a one-to-one association in a subclass --- .../OneToOneSingleTableInheritanceTest.php | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 tests/Doctrine/Tests/ORM/Functional/OneToOneSingleTableInheritanceTest.php 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; +} From 185f22668c682b547dabf1a601ef038a06935bb9 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Sun, 18 Jan 2015 18:15:03 +0100 Subject: [PATCH 3/4] #1265 DDC-3517 - correcting test docblocks --- .../OneToOneSingleTableInheritanceTest.php | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneSingleTableInheritanceTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneSingleTableInheritanceTest.php index 0411299de..1692731cf 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneSingleTableInheritanceTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneSingleTableInheritanceTest.php @@ -9,16 +9,10 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Query; use Doctrine\Tests\OrmFunctionalTestCase; -/** - * Tests a unidirectional one-to-one association mapping (without inheritance). - * Inverse side is not present. - */ class OneToOneSingleTableInheritanceTest extends OrmFunctionalTestCase { protected function setUp() { - //$this->useModelSet('ecommerce'); - parent::setUp(); $this->_schemaTool->createSchema([ @@ -28,6 +22,12 @@ class OneToOneSingleTableInheritanceTest extends OrmFunctionalTestCase ]); } + /** + * Tests a unidirectional one-to-one association mapping from an inheritance child class + * + * @group DDC-3517 + * @group #1265 + */ public function testFindFromOneToOneOwningSideJoinedTableInheritance() { $cat = new Cat(); @@ -45,7 +45,6 @@ class OneToOneSingleTableInheritanceTest extends OrmFunctionalTestCase $this->assertSame($cat->id, $foundCat->id); $this->assertInstanceOf(LitterBox::CLASSNAME, $foundCat->litterBox); $this->assertSame($cat->litterBox->id, $foundCat->litterBox->id); - } } From 9abbdb9e7f17480756540ed2068271ffcc67e6df Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Sun, 18 Jan 2015 18:25:46 +0100 Subject: [PATCH 4/4] #1265 DDC-3517 - moved test assets to separate models dir, namespaced table names --- .../OneToOneSingleTableInheritance/Cat.php | 16 +++++++++ .../LitterBox.php | 15 ++++++++ .../OneToOneSingleTableInheritance/Pet.php | 17 ++++++++++ .../OneToOneSingleTableInheritanceTest.php | 34 ++----------------- 4 files changed, 51 insertions(+), 31 deletions(-) create mode 100644 tests/Doctrine/Tests/Models/OneToOneSingleTableInheritance/Cat.php create mode 100644 tests/Doctrine/Tests/Models/OneToOneSingleTableInheritance/LitterBox.php create mode 100644 tests/Doctrine/Tests/Models/OneToOneSingleTableInheritance/Pet.php diff --git a/tests/Doctrine/Tests/Models/OneToOneSingleTableInheritance/Cat.php b/tests/Doctrine/Tests/Models/OneToOneSingleTableInheritance/Cat.php new file mode 100644 index 000000000..1e7eee014 --- /dev/null +++ b/tests/Doctrine/Tests/Models/OneToOneSingleTableInheritance/Cat.php @@ -0,0 +1,16 @@ +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; -}