/** * Hydrates a node of the object graph. * * @param array $row The result set representing the current node. * @param xPDOObject $instance The xPDOObject instance to be hydrated from the node. * @param string $alias The alias identifying the object in the parent relationship. * @param array $relations Child relations of the current node. */ public function hydrateGraphNode(&$row, &$instance, $alias, $relations) { $relObj = null; if ($relationMeta = $instance->getFKDefinition($alias)) { if ($row[$alias . '_' . $relationMeta['foreign']] != null) { $relObj = $this->xpdo->call($relationMeta['class'], '_loadInstance', array(&$this->xpdo, $relationMeta['class'], $alias, $row)); if ($relObj) { if (strtolower($relationMeta['cardinality']) == 'many') { $instance->addMany($relObj, $alias); } else { $instance->addOne($relObj, $alias); } } } } if (!empty($relations) && is_object($relObj)) { while (list($relationAlias, $subRelations) = each($relations)) { if (is_array($subRelations) && !empty($subRelations)) { foreach ($subRelations as $subRelation) { $this->hydrateGraphNode($row, $relObj, $relationAlias, $subRelation); } } else { $this->hydrateGraphNode($row, $relObj, $relationAlias, null); } } } }
/** * Hydrates a node of the object graph. * * @param array $row The result set representing the current node. * @param xPDOObject $instance The xPDOObject instance to be hydrated from the node. * @param string $alias The alias identifying the object in the parent relationship. * @param array $relations Child relations of the current node. */ public function hydrateGraphNode(&$row, &$instance, $alias, $relations) { $relObj = null; if ($relationMeta = $instance->getFKDefinition($alias)) { if ($row[$alias . '_' . $relationMeta['foreign']] != null) { if ($relObj = $this->xpdo->newObject($relationMeta['class'])) { $relObj->_lazy = array_keys($relObj->_fields); $prefix = $alias . '_'; $relObj->fromArray($row, $prefix, true, true); $relObj->_new = false; $relObj->_dirty = array(); if (strtolower($relationMeta['cardinality']) == 'many') { $instance->addMany($relObj, $alias); } else { $instance->addOne($relObj, $alias); } } } } if (!empty($relations) && is_object($relObj)) { while (list($relationAlias, $subRelations) = each($relations)) { if (is_array($subRelations) && !empty($subRelations)) { foreach ($subRelations as $subRelation) { $this->hydrateGraphNode($row, $relObj, $relationAlias, $subRelation); } } else { $this->hydrateGraphNode($row, $relObj, $relationAlias, null); } } } }