/**
  * Gets a Persister service by key.
  *
  * @param   string  $key
  * @return  PersisterInterface
  * @throws  PersisterException  If the service was not found.
  */
 public function getPersister($key)
 {
     if (empty($key) || false === $this->hasPersister($key)) {
         throw PersisterException::persisterNotFound($key);
     }
     return $this->persisters[$key];
 }
Example #2
0
 /**
  * Processes raw MongoDB data an converts it into a standardized Record object.
  *
  * @param   EntityMetadata  $metadata
  * @param   array           $data
  * @param   Store           $store
  * @return  Record
  */
 protected function hydrateRecord(EntityMetadata $metadata, array $data, Store $store)
 {
     $identifier = $data[$this->getIdentifierKey()];
     unset($data[$this->getIdentifierKey()]);
     $type = $this->extractType($metadata, $data);
     unset($data[$this->getPolymorphicKey()]);
     $metadata = $store->getMetadataForType($type);
     foreach ($metadata->getRelationships() as $key => $relMeta) {
         if (!isset($data[$key])) {
             continue;
         }
         if (true === $relMeta->isMany() && !is_array($data[$key])) {
             throw PersisterException::badRequest(sprintf('Relationship key "%s" is a reference many. Expected record data type of array, "%s" found on model "%s" for identifier "%s"', $key, gettype($data[$key]), $type, $identifier));
         }
         $references = $relMeta->isOne() ? [$data[$key]] : $data[$key];
         $extracted = [];
         foreach ($references as $reference) {
             $extracted[] = $this->extractRelationship($relMeta, $reference);
         }
         $data[$key] = $relMeta->isOne() ? reset($extracted) : $extracted;
     }
     return new Record($type, $identifier, $data);
 }