コード例 #1
0
 /**
  * @param string    $field
  * @param \StdClass $source
  * @param object    $entity
  *
  * @return array|Proxy|object
  * @throws HydrationException
  * @throws MappingException
  */
 private function hydrateAssociation($field, $entity, $source)
 {
     $accessor = new PropertyAccessor();
     $targetClassName = $this->metadata->getAssociationTargetClass($field);
     $mapping = $this->metadata->getAssociationMapping($field);
     $targetPersister = $this->manager->getUnitOfWork()->getEntityPersister($targetClassName);
     $targetMetadata = $this->manager->getClassMetadata($mapping['target']);
     $apiField = $mapping['api_field'];
     $field = $mapping['field'];
     if ($this->metadata->isSingleValuedAssociation($field)) {
         $identifiers = $this->metadata->getIdentifierValues($entity);
         if ($mapping['isOwningSide']) {
             try {
                 $value = $accessor->getValue($source, $apiField);
             } catch (NoSuchPropertyException $exception) {
                 if ($mapping['nullable']) {
                     return null;
                 }
                 throw new HydrationException(sprintf('Api field %s for property %s does not present in response', $apiField, $field));
             }
             if ($targetMetadata->isIdentifierComposite()) {
                 throw new HydrationException('Composite references not supported');
             }
             $targetIdsNames = $targetMetadata->getIdentifierFieldNames();
             $targetIdName = array_shift($targetIdsNames);
             $type = $this->manager->getConfiguration()->getTypeRegistry()->get($targetMetadata->getTypeOfField($targetIdName));
             $identifiers = [$targetIdName => $type->fromApiValue($value)];
         }
         return $targetPersister->getToOneEntity($mapping, $entity, $identifiers);
     }
     if ($this->metadata->isCollectionValuedAssociation($field)) {
         return $targetPersister->getOneToManyCollection($mapping, $entity);
     }
     throw new MappingException('Invalid metadata association type');
 }
コード例 #2
0
 public function __construct(EntityManager $manager)
 {
     $this->manager = $manager;
     $this->uow = $manager->getUnitOfWork();
     $proxyGenerator = new ProxyGenerator($this->manager->getConfiguration()->getProxyDir(), $this->manager->getConfiguration()->getProxyNamespace());
     parent::__construct($proxyGenerator, $this->manager->getMetadataFactory(), $this->manager->getConfiguration()->isAutogenerateProxies());
 }
コード例 #3
0
 public function loadById(array $identifiers, $entity = null)
 {
     $finderClass = $this->metadata->getFinderClass();
     /** @var Finder $finder */
     $finder = new $finderClass($this->manager);
     $body = $finder->find($this->client, $this->metadata, $identifiers);
     if (null === $body) {
         return null;
     }
     $entity = $this->manager->getUnitOfWork()->getOrCreateEntity($this->metadata->getName(), $body, $entity);
     return $entity;
 }