/**
  * @param array|mixed $id
  *
  * @return array
  * @throws MappingException
  */
 protected function fixScalarId($id, ApiMetadata $metadata)
 {
     if (is_array($id)) {
         return $id;
     }
     $id = (array) $id;
     $identifiers = $metadata->getIdentifierFieldNames();
     if (count($id) !== count($identifiers)) {
         throw MappingException::invalidIdentifierStructure();
     }
     return array_combine($identifiers, (array) $id);
 }
 /**
  * convert foreign identifiers into scalar foreign key values to avoid object to string conversion failures.
  *
  * @param ApiMetadata $class
  * @param array       $id
  *
  * @return array
  */
 public function flattenIdentifier(ApiMetadata $class, array $id)
 {
     $flatId = [];
     foreach ($class->getIdentifierFieldNames() as $field) {
         if ($class->hasAssociation($field) && array_key_exists($field, $id) && is_object($id[$field])) {
             /* @var EntityMetadata $targetClassMetadata */
             $targetClassMetadata = $this->manager->getClassMetadata($class->getAssociationMapping($field)['target']);
             if ($this->unitOfWork->isInIdentityMap($id[$field])) {
                 $associatedId = $this->flattenIdentifier($targetClassMetadata, $this->unitOfWork->getEntityIdentifier($id[$field]));
             } else {
                 $associatedId = $this->flattenIdentifier($targetClassMetadata, $targetClassMetadata->getIdentifierValues($id[$field]));
             }
             $flatId[$field] = implode(' ', $associatedId);
         } else {
             $flatId[$field] = $id[$field];
         }
     }
     return $flatId;
 }