/** * Gets an entity instance. * * @param array $data The instance data. * @param string $dqlAlias The DQL alias of the entity's class. * * @return object The entity. * * @throws HydrationException */ private function getEntity(array $data, $dqlAlias) { $className = $this->_rsm->aliasMap[$dqlAlias]; if (isset($this->_rsm->discriminatorColumns[$dqlAlias])) { $fieldName = $this->_rsm->discriminatorColumns[$dqlAlias]; if (!isset($this->_rsm->metaMappings[$fieldName])) { throw HydrationException::missingDiscriminatorMetaMappingColumn($className, $fieldName, $dqlAlias); } $discrColumn = $this->_rsm->metaMappings[$fieldName]; if (!isset($data[$discrColumn])) { throw HydrationException::missingDiscriminatorColumn($className, $discrColumn, $dqlAlias); } if ($data[$discrColumn] === "") { throw HydrationException::emptyDiscriminatorValue($dqlAlias); } $discrMap = $this->_metadataCache[$className]->discriminatorMap; if (!isset($discrMap[$data[$discrColumn]])) { throw HydrationException::invalidDiscriminatorValue($data[$discrColumn], array_keys($discrMap)); } $className = $discrMap[$data[$discrColumn]]; unset($data[$discrColumn]); } if (isset($this->_hints[Query::HINT_REFRESH_ENTITY]) && isset($this->rootAliases[$dqlAlias])) { $this->registerManaged($this->_metadataCache[$className], $this->_hints[Query::HINT_REFRESH_ENTITY], $data); } $this->_hints['fetchAlias'] = $dqlAlias; return $this->_uow->createEntity($className, $data, $this->_hints); }