From 1250cd7a5aa3697fbc9743bc666bcbaa5d4a8aba Mon Sep 17 00:00:00 2001 From: Michael Ridgway Date: Thu, 28 Jul 2011 10:50:22 -0400 Subject: [PATCH] F[DDC-1275] ixed check for owning side of a toOne relationship --- .../ORM/Query/ResultSetMappingBuilder.php | 36 +++++++------------ 1 file changed, 12 insertions(+), 24 deletions(-) diff --git a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php index 95d548daf..d1690b72c 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php +++ b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php @@ -20,6 +20,7 @@ namespace Doctrine\ORM\Query; use Doctrine\ORM\EntityManager; +use Doctrine\ORM\Mapping\ClassMetadataInfo; /** * A ResultSetMappingBuilder uses the EntityManager to automatically populate entity fields @@ -52,22 +53,7 @@ class ResultSetMappingBuilder extends ResultSetMapping public function addRootEntityFromClassMetadata($class, $alias, $renamedColumns = array()) { $this->addEntityResult($class, $alias); - $classMetadata = $this->em->getClassMetadata($class); - if ($classMetadata->isInheritanceTypeSingleTable() || $classMetadata->isInheritanceTypeJoined()) { - throw new \InvalidArgumentException('ResultSetMapping builder does not currently support inheritance.'); - } - $platform = $this->em->getConnection()->getDatabasePlatform(); - foreach ($classMetadata->getColumnNames() AS $columnName) { - $propertyName = $classMetadata->getFieldName($columnName); - if (isset($renamedColumns[$columnName])) { - $columnName = $renamedColumns[$columnName]; - } - if (isset($this->fieldMappings[$columnName])) { - throw new \InvalidArgumentException("The column '$columnName' conflicts with another column in the mapper."); - } - $this->addFieldResult($alias, $platform->getSQLResultCasing($columnName), $propertyName); - } - $this->addAssocationMappings($alias, $classMetadata->getAssociationMappings()); + $this->addAllClassFields($class, $alias, $renamedColumns); } /** @@ -82,6 +68,14 @@ class ResultSetMappingBuilder extends ResultSetMapping public function addJoinedEntityFromClassMetadata($class, $alias, $parentAlias, $relation, $renamedColumns = array()) { $this->addJoinedEntityResult($class, $alias, $parentAlias, $relation); + $this->addAllClassFields($class, $alias, $renamedColumns); + } + + /** + * Adds all fields of the given class to the result set mapping (columns and meta fields) + */ + protected function addAllClassFields($class, $alias, $renamedColumns = array()) + { $classMetadata = $this->em->getClassMetadata($class); if ($classMetadata->isInheritanceTypeSingleTable() || $classMetadata->isInheritanceTypeJoined()) { throw new \InvalidArgumentException('ResultSetMapping builder does not currently support inheritance.'); @@ -97,14 +91,8 @@ class ResultSetMappingBuilder extends ResultSetMapping } $this->addFieldResult($alias, $platform->getSQLResultCasing($columnName), $propertyName); } - $this->addAssocationMappings($alias, $classMetadata->getAssociationMappings()); - } - - protected function addAssocationMappings($alias, $associationMappings) - { - $platform = $this->em->getConnection()->getDatabasePlatform(); - foreach ($associationMappings AS $associationMapping) { - if (isset($associationMapping['joinColumns'])) { + foreach ($classMetadata->associationMappings AS $associationMapping) { + if ($associationMapping['isOwningSide'] && $associationMapping['type'] & ClassMetadataInfo::TO_ONE) { foreach ($associationMapping['joinColumns'] AS $joinColumn) { $columnName = $joinColumn['name']; $renamedColumnName = isset($renamedColumns[$columnName]) ? $renamedColumns[$columnName] : $columnName;