Skip to content

Commit

Permalink
Merge branch 'hotfix/#1265-sti-persister-one-to-one-association-notices'
Browse files Browse the repository at this point in the history
Close #1265
  • Loading branch information
Ocramius committed Jan 18, 2015
2 parents 61e07e5 + 544add9 commit d8d4ec6
Show file tree
Hide file tree
Showing 5 changed files with 102 additions and 2 deletions.
4 changes: 2 additions & 2 deletions lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php
Original file line number Diff line number Diff line change
Expand Up @@ -90,14 +90,14 @@ protected function getSelectColumnsSQL()
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
)
Expand Down
16 changes: 16 additions & 0 deletions tests/Doctrine/Tests/Models/OneToOneSingleTableInheritance/Cat.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?php

namespace Doctrine\Tests\Models\OneToOneSingleTableInheritance;

/** @Entity */
class Cat extends Pet
{
const CLASSNAME = __CLASS__;

/**
* @OneToOne(targetEntity="LitterBox")
*
* @var LitterBox
*/
public $litterBox;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

namespace Doctrine\Tests\Models\OneToOneSingleTableInheritance;

/**
* @Entity
* @Table(name="one_to_one_single_table_inheritance_litter_box")
*/
class LitterBox
{
const CLASSNAME = __CLASS__;

/** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */
public $id;
}
17 changes: 17 additions & 0 deletions tests/Doctrine/Tests/Models/OneToOneSingleTableInheritance/Pet.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?php

namespace Doctrine\Tests\Models\OneToOneSingleTableInheritance;

/**
* @Entity
* @Table(name="one_to_one_single_table_inheritance_pet")
* @InheritanceType("SINGLE_TABLE")
* @DiscriminatorMap({"cat" = "Cat"})
*/
abstract class Pet
{
const CLASSNAME = __CLASS__;

/** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */
public $id;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?php

namespace Doctrine\Tests\ORM\Functional;

use Doctrine\Tests\Models\ECommerce\ECommerceProduct;
use Doctrine\Tests\Models\ECommerce\ECommerceShipping;
use Doctrine\ORM\Mapping\AssociationMapping;
use Doctrine\ORM\Mapping\ClassMetadata;
use Doctrine\ORM\Query;
use Doctrine\Tests\Models\OneToOneSingleTableInheritance\Cat;
use Doctrine\Tests\Models\OneToOneSingleTableInheritance\LitterBox;
use Doctrine\Tests\Models\OneToOneSingleTableInheritance\Pet;
use Doctrine\Tests\OrmFunctionalTestCase;

class OneToOneSingleTableInheritanceTest extends OrmFunctionalTestCase
{
protected function setUp()
{
parent::setUp();

$this->_schemaTool->createSchema([
$this->_em->getClassMetadata(Pet::CLASSNAME),
$this->_em->getClassMetadata(Cat::CLASSNAME),
$this->_em->getClassMetadata(LitterBox::CLASSNAME),
]);
}

/**
* Tests a unidirectional one-to-one association mapping from an inheritance child class
*
* @group DDC-3517
* @group #1265
*/
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);
}
}

0 comments on commit d8d4ec6

Please sign in to comment.