Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Merge branch 'DDC-1300'

  • Loading branch information...
commit 1666d59da49b017163896dd6e70d25773a021de6 2 parents 15c877b + bcc7bb1
@beberlei beberlei authored
View
10 lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php
@@ -216,13 +216,21 @@ private function _getEntity(array $data, $dqlAlias)
private function _getEntityFromIdentityMap($className, array $data)
{
+ // TODO: Abstract this code and UnitOfWork::createEntity() equivalent?
$class = $this->_ce[$className];
+ /* @var $class ClassMetadata */
if ($class->isIdentifierComposite) {
$idHash = '';
foreach ($class->identifier as $fieldName) {
- $idHash .= $data[$fieldName] . ' ';
+ if (isset($class->associationMappings[$fieldName])) {
+ $idHash .= $data[$class->associationMappings[$fieldName]['joinColumns'][0]['name']] . ' ';
+ } else {
+ $idHash .= $data[$fieldName] . ' ';
+ }
}
return $this->_uow->tryGetByIdHash(rtrim($idHash), $class->rootEntityName);
+ } else if (isset($class->associationMappings[$class->identifier[0]])) {
+ return $this->_uow->tryGetByIdHash($data[$class->associationMappings[$class->identifier[0]]['joinColumns'][0]['name']], $class->rootEntityName);
} else {
return $this->_uow->tryGetByIdHash($data[$class->identifier[0]], $class->rootEntityName);
}
View
108 tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1300Test.php
@@ -0,0 +1,108 @@
+<?php
+
+namespace Doctrine\Tests\ORM\Functional\Ticket;
+
+require_once __DIR__ . '/../../../TestInit.php';
+
+/**
+ * @group DDC-1300
+ */
+class DDC1300Test extends \Doctrine\Tests\OrmFunctionalTestCase
+{
+ public function setUp()
+ {
+ parent::setUp();
+ $this->_schemaTool->createSchema(array(
+ $this->_em->getClassMetadata(__NAMESPACE__ . '\\DDC1300Foo'),
+ $this->_em->getClassMetadata(__NAMESPACE__ . '\\DDC1300FooLocale'),
+ ));
+ }
+
+ public function testIssue()
+ {
+ $foo = new DDC1300Foo();
+ $foo->_fooReference = "foo";
+
+ $this->_em->persist($foo);
+ $this->_em->flush();
+
+ $locale = new DDC1300FooLocale();
+ $locale->_foo = $foo;
+ $locale->_locale = "en";
+ $locale->_title = "blub";
+
+ $this->_em->persist($locale);
+ $this->_em->flush();
+
+ $query = $this->_em->createQuery('SELECT f, fl FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1300Foo f JOIN f._fooLocaleRefFoo fl');
+ $result = $query->getResult();
+
+ $this->assertEquals(1, count($result));
+ }
+}
+
+/**
+ * @Entity
+ */
+class DDC1300Foo
+{
+ /**
+ * @var integer fooID
+ * @Column(name="fooID", type="integer", nullable=false)
+ * @GeneratedValue(strategy="AUTO")
+ * @Id
+ */
+ public $_fooID = null;
+
+ /**
+ * @var string fooReference
+ * @Column(name="fooReference", type="string", nullable=true, length=45)
+ */
+ public $_fooReference = null;
+
+ /**
+ * @OneToMany(targetEntity="DDC1300FooLocale", mappedBy="_foo",
+ * cascade={"persist"})
+ */
+ public $_fooLocaleRefFoo = null;
+
+ /**
+ * Constructor
+ *
+ * @param array|Zend_Config|null $options
+ * @return Bug_Model_Foo
+ */
+ public function __construct($options = null)
+ {
+ $this->_fooLocaleRefFoo = new \Doctrine\Common\Collections\ArrayCollection();
+ }
+
+}
+
+/**
+ * @Entity
+ */
+class DDC1300FooLocale
+{
+
+ /**
+ * @ManyToOne(targetEntity="DDC1300Foo")
+ * @JoinColumn(name="fooID", referencedColumnName="fooID")
+ * @Id
+ */
+ public $_foo = null;
+
+ /**
+ * @var string locale
+ * @Column(name="locale", type="string", nullable=false, length=5)
+ * @Id
+ */
+ public $_locale = null;
+
+ /**
+ * @var string title
+ * @Column(name="title", type="string", nullable=true, length=150)
+ */
+ public $_title = null;
+
+}
Please sign in to comment.
Something went wrong with that request. Please try again.