From 6db507c465868558828e672215ba0d6fe469a1de Mon Sep 17 00:00:00 2001 From: romanb Date: Sat, 13 Sep 2008 20:06:49 +0000 Subject: [PATCH] Some array/object related fixes to hydration --- .../Internal/Hydration/StandardHydrator.php | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/lib/Doctrine/ORM/Internal/Hydration/StandardHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/StandardHydrator.php index 6cb7b68cb..b58503539 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/StandardHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/StandardHydrator.php @@ -150,7 +150,8 @@ class Doctrine_ORM_Internal_Hydration_StandardHydrator extends Doctrine_ORM_Inte if (count($result) > 1 || count($result[0]) > 1) { throw Doctrine_ORM_Exceptions_HydrationException::nonUniqueResult(); } - return array_shift($this->_gatherScalarRowData($result[0], $cache)); + $result = $this->_gatherScalarRowData($result[0], $cache); + return array_shift($result); } // Process result set @@ -245,8 +246,13 @@ class Doctrine_ORM_Internal_Hydration_StandardHydrator extends Doctrine_ORM_Inte $driver->getReferenceValue($baseElement, $relationAlias)); } } else if ( ! isset($baseElement[$relationAlias])) { - $driver->setRelatedElement($baseElement, $relationAlias, - $driver->getElementCollection($entityName)); + if ($hydrationMode == Doctrine_Query::HYDRATE_ARRAY) { + $array = array(); + $driver->setRelatedElement($baseElement, $relationAlias, $array); + } else { + $driver->setRelatedElement($baseElement, $relationAlias, + $driver->getElementCollection($entityName)); + } } } else { // x-1 relation @@ -260,9 +266,16 @@ class Doctrine_ORM_Internal_Hydration_StandardHydrator extends Doctrine_ORM_Inte $driver->getElement($data, $entityName)); } } - if (($coll =& $driver->getReferenceValue($baseElement, $relationAlias)) !== null) { - $this->_updateResultPointer($resultPointers, $coll, $index, $dqlAlias, $oneToOne); + if ($hydrationMode == Doctrine_Query::HYDRATE_ARRAY) { + if (($coll =& $driver->getReferenceValue($baseElement, $relationAlias)) !== null) { + $this->_updateResultPointer($resultPointers, $coll, $index, $dqlAlias, $oneToOne); + } + } else { + if (($coll = $driver->getReferenceValue($baseElement, $relationAlias)) !== null) { + $this->_updateResultPointer($resultPointers, $coll, $index, $dqlAlias, $oneToOne); + } } + } // append scalar values to mixed result sets