/** * Adds the entity result mapping of the results of native SQL queries to the result set. * * @param ClassMetadataInfo $classMetadata * @param array $entityMapping * @param string $alias * @return ResultSetMappingBuilder */ public function addNamedNativeQueryEntityResultMapping(ClassMetadataInfo $classMetadata, array $entityMapping, $alias) { if (isset($entityMapping['discriminatorColumn']) && $entityMapping['discriminatorColumn']) { $discriminatorColumn = $entityMapping['discriminatorColumn']; $this->setDiscriminatorColumn($alias, $discriminatorColumn); $this->addMetaResult($alias, $discriminatorColumn, $discriminatorColumn); } if (isset($entityMapping['fields']) && !empty($entityMapping['fields'])) { foreach ($entityMapping['fields'] as $field) { $fieldName = $field['name']; $relation = null; if (strpos($fieldName, '.')) { list($relation, $fieldName) = explode('.', $fieldName); } if (isset($classMetadata->associationMappings[$relation])) { if ($relation) { $associationMapping = $classMetadata->associationMappings[$relation]; $joinAlias = $alias . $relation; $parentAlias = $alias; $this->addJoinedEntityResult($associationMapping['targetEntity'], $joinAlias, $parentAlias, $relation); $this->addFieldResult($joinAlias, $field['column'], $fieldName); } else { $this->addFieldResult($alias, $field['column'], $fieldName, $classMetadata->name); } } else { if (!isset($classMetadata->fieldMappings[$fieldName])) { throw new \InvalidArgumentException("Entity '" . $classMetadata->name . "' has no field '" . $fieldName . "'. "); } $this->addFieldResult($alias, $field['column'], $fieldName, $classMetadata->name); } } } else { foreach ($classMetadata->getColumnNames() as $columnName) { $propertyName = $classMetadata->getFieldName($columnName); $this->addFieldResult($alias, $columnName, $propertyName); } } return $this; }