src/Normaliser/SqlNormaliser.php
public function denormalise(array $data, array $options = [])
    {
        if (empty($data)) {
            return $data;
        }

        if (!isset($options["entityClass"])) {
            throw new NormalisationException("Cannot denormalise data without knowing the main entity class");
        }
        if (!isset($options["metadataProvider"])) {
            throw new NormalisationException("Cannot denormalise data without a metadata provider");
        }

        /** @var EntityMetadataProviderInterface $metadataProvider */
        $this->metadataProvider = $options["metadataProvider"];
        $metadata = $this->metadataProvider->getEntityMetadata($options["entityClass"]);

        // split fields based on prefix
        $prefixedFields = [];
        foreach ($data[0] as $field => $value) {
            $fieldParts = explode("__", $field);
            // if this field has no prefix, set it to an empty string
            if (count($fieldParts) == 1) {
                array_unshift($fieldParts, "");
            }
            // add the field to the prefix's array
            $prefix = $fieldParts[0];
            if (empty($prefixedFields[$prefix])) {
                $prefixedFields[$prefix] = [];
            }
            $prefixedFields[$prefix][$fieldParts[1]] = $field;
        }

        // handle case where only 1 prefix is present
        if (count($prefixedFields) == 1) {
            $fields = array_pop($prefixedFields);
            $primaryKey = $metadata->getPrimaryKey();
            if (isset($fields[$primaryKey])) {
                $this->primaryKeyFields = [$fields[$primaryKey] => true];
            }
            return $this->denormaliseData($data, $fields);
        }

        // complex result set
        if (!isset($options["entityMap"])) {
            throw new NormalisationException("Cannot denormalise data without an entity map");
        }

        $entityMap = $options["entityMap"];

        $collection = $metadata->getCollection();

        if (empty($prefixedFields[$collection])) {
            throw new NormalisationException("The collection '$collection' was not found in the fields array for this record set: '" . implode("', '", array_keys($prefixedFields)) . "'");
        }

        // reset primary key fields
        $this->primaryKeyFields = [];
        $this->treedEntities = [];
        $this->childRowAliases = [];

        $this->createFieldTree($prefixedFields, $entityMap, $collection, $options["entityClass"]);

        reset($data);
        $result = $this->denormaliseData($data, $prefixedFields[$collection], $collection);

        return  $result;
    }
public function denormalise(array $data, array $options = [])
    {
        if (empty($data)) {
            return $data;
        }

        if (!isset($options["entityClass"])) {
            throw new NormalisationException("Cannot denormalise data without knowing the main entity class");
        }
        if (!isset($options["metadataProvider"])) {
            throw new NormalisationException("Cannot denormalise data without a metadata provider");
        }

        /** @var EntityMetadataProviderInterface $metadataProvider */
        $this->metadataProvider = $options["metadataProvider"];
        $metadata = $this->metadataProvider->getEntityMetadata($options["entityClass"]);

        // split fields based on prefix
        $prefixedFields = [];
        foreach ($data[0] as $field => $value) {
            $fieldParts = explode("__", $field);
            // if this field has no prefix, set it to an empty string
            if (count($fieldParts) == 1) {
                array_unshift($fieldParts, "");
            }
            // add the field to the prefix's array
            $prefix = $fieldParts[0];
            if (empty($prefixedFields[$prefix])) {
                $prefixedFields[$prefix] = [];
            }
            $prefixedFields[$prefix][$fieldParts[1]] = $field;
        }

        // handle case where only 1 prefix is present
        if (count($prefixedFields) == 1) {
            $fields = array_pop($prefixedFields);
            $primaryKey = $metadata->getPrimaryKey();
            if (isset($fields[$primaryKey])) {
                $this->primaryKeyFields = [$fields[$primaryKey] => true];
            }
            return $this->denormaliseData($data, $fields);
        }

        // complex result set
        if (!isset($options["entityMap"])) {
            throw new NormalisationException("Cannot denormalise data without an entity map");
        }

        $entityMap = $options["entityMap"];

        $collection = $metadata->getCollection();

        if (empty($prefixedFields[$collection])) {
            throw new NormalisationException("The collection '$collection' was not found in the fields array for this record set: '" . implode("', '", array_keys($prefixedFields)) . "'");
        }

        // reset primary key fields
        $this->primaryKeyFields = [];
        $this->treedEntities = [];
        $this->childRowAliases = [];

        $this->createFieldTree($prefixedFields, $entityMap, $collection, $options["entityClass"]);

        reset($data);
        $result = $this->denormaliseData($data, $prefixedFields[$collection], $collection);

        return  $result;
    }
public function denormalise ( array $ data , array $ options = [ ] ) { if ( empty ( $ data ) ) { return $ data ; } if ( ! isset ( $ options [ "entityClass" ] ) ) { throw new NormalisationException ( "Cannot denormalise data without knowing the main entity class" ) ; } if ( ! isset ( $ options [ "metadataProvider" ] ) ) { throw new NormalisationException ( "Cannot denormalise data without a metadata provider" ) ; } /** @var EntityMetadataProviderInterface $metadataProvider */ $ this -> metadataProvider = $ options [ "metadataProvider" ] ; $ metadata = $ this -> metadataProvider -> getEntityMetadata ( $ options [ "entityClass" ] ) ; // split fields based on prefix $ prefixedFields = [ ] ; foreach ( $ data [ 0 ] as $ field => $ value ) { $ fieldParts = explode ( "__" , $ field ) ; // if this field has no prefix, set it to an empty string if ( count ( $ fieldParts ) == 1 ) { array_unshift ( $ fieldParts , "" ) ; } // add the field to the prefix's array $ prefix = $ fieldParts [ 0 ] ; if ( empty ( $ prefixedFields [ $ prefix ] ) ) { $ prefixedFields [ $ prefix ] = [ ] ; } $ prefixedFields [ $ prefix ] [ $ fieldParts [ 1 ] ] = $ field ; } // handle case where only 1 prefix is present if ( count ( $ prefixedFields ) == 1 ) { $ fields = array_pop ( $ prefixedFields ) ; $ primaryKey = $ metadata -> getPrimaryKey ( ) ; if ( isset ( $ fields [ $ primaryKey ] ) ) { $ this -> primaryKeyFields = [ $ fields [ $ primaryKey ] => true ] ; } return $ this -> denormaliseData ( $ data , $ fields ) ; } // complex result set if ( ! isset ( $ options [ "entityMap" ] ) ) { throw new NormalisationException ( "Cannot denormalise data without an entity map" ) ; } $ entityMap = $ options [ "entityMap" ] ; $ collection = $ metadata -> getCollection ( ) ; if ( empty ( $ prefixedFields [ $ collection ] ) ) { throw new NormalisationException ( "The collection '$collection' was not found in the fields array for this record set: '" . implode ( "', '" , array_keys ( $ prefixedFields ) ) . "'" ) ; } // reset primary key fields $ this -> primaryKeyFields = [ ] ; $ this -> treedEntities = [ ] ; $ this -> childRowAliases = [ ] ; $ this -> createFieldTree ( $ prefixedFields , $ entityMap , $ collection , $ options [ "entityClass" ] ) ; reset ( $ data ) ; $ result = $ this -> denormaliseData ( $ data , $ prefixedFields [ $ collection ] , $ collection ) ; return $ result ; }
format DB data into standard format

@param array $data
@param array $options

@throws NormalisationException
@return array
format DB data into standard format