This commit is contained in:
parent
a0a9df9b71
commit
cc56542d11
@ -800,6 +800,10 @@ class Doctrine_Hydrate implements Serializable
|
|||||||
$parse = true;
|
$parse = true;
|
||||||
|
|
||||||
foreach ($data as $key => $value) {
|
foreach ($data as $key => $value) {
|
||||||
|
|
||||||
|
// The following little cache solution ensures that field aliases are
|
||||||
|
// parsed only once. This increases speed on large result sets by an order
|
||||||
|
// of magnitude.
|
||||||
if ( ! isset($cache[$key])) {
|
if ( ! isset($cache[$key])) {
|
||||||
$e = explode('__', $key);
|
$e = explode('__', $key);
|
||||||
$cache[$key]['field'] = $field = strtolower(array_pop($e));
|
$cache[$key]['field'] = $field = strtolower(array_pop($e));
|
||||||
@ -872,21 +876,8 @@ class Doctrine_Hydrate implements Serializable
|
|||||||
$coll =& $prev[$parent][$componentAlias];
|
$coll =& $prev[$parent][$componentAlias];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($index !== false) {
|
$this->_setLastElement($prev, $coll, $index, $alias);
|
||||||
$prev[$alias] =& $coll[$index];
|
|
||||||
} else {
|
|
||||||
// first check the count (we do not want to get the last element
|
|
||||||
// of an empty collection/array)
|
|
||||||
if (count($coll) > 0) {
|
|
||||||
// check the type
|
|
||||||
if (is_array($coll)) {
|
|
||||||
end($coll);
|
|
||||||
$prev[$alias] =& $coll[key($coll)];
|
|
||||||
} else {
|
|
||||||
$prev[$alias] = $coll->getLast();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$currData[$alias] = array();
|
$currData[$alias] = array();
|
||||||
$identifiable[$alias] = null;
|
$identifiable[$alias] = null;
|
||||||
}
|
}
|
||||||
@ -948,20 +939,7 @@ class Doctrine_Hydrate implements Serializable
|
|||||||
$coll =& $prev[$parent][$componentAlias];
|
$coll =& $prev[$parent][$componentAlias];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($index !== false) {
|
$this->_setLastElement($prev, $coll, $index, $alias);
|
||||||
$prev[$alias] =& $coll[$index];
|
|
||||||
} else {
|
|
||||||
// first check the count (we do not want to get the last element
|
|
||||||
// of an empty collection/array)
|
|
||||||
if (count($coll) > 0) {
|
|
||||||
if (is_array($coll)) {
|
|
||||||
end($coll);
|
|
||||||
$prev[$alias] =& $coll[key($coll)];
|
|
||||||
} else {
|
|
||||||
$prev[$alias] = $coll->getLast();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$index = false;
|
$index = false;
|
||||||
$currData[$alias] = array();
|
$currData[$alias] = array();
|
||||||
unset($identifiable[$alias]);
|
unset($identifiable[$alias]);
|
||||||
@ -972,6 +950,32 @@ class Doctrine_Hydrate implements Serializable
|
|||||||
$stmt->closeCursor();
|
$stmt->closeCursor();
|
||||||
return $array;
|
return $array;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* _setLastElement
|
||||||
|
*
|
||||||
|
* sets the last element of given data array / collection
|
||||||
|
* as previous element
|
||||||
|
*
|
||||||
|
* @param boolean|integer $index
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function _setLastElement(&$prev, &$coll, $index, $alias)
|
||||||
|
{
|
||||||
|
if ($index !== false) {
|
||||||
|
$prev[$alias] =& $coll[$index];
|
||||||
|
} else {
|
||||||
|
// first check the count (we do not want to get the last element
|
||||||
|
// of an empty collection/array)
|
||||||
|
if (count($coll) > 0) {
|
||||||
|
if (is_array($coll)) {
|
||||||
|
end($coll);
|
||||||
|
$prev[$alias] =& $coll[key($coll)];
|
||||||
|
} else {
|
||||||
|
$prev[$alias] = $coll->getLast();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* @return string returns a string representation of this object
|
* @return string returns a string representation of this object
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user