Example #1
0
 /**
  * @param string[] $result
  * @param string   $entityClass
  * @param bool     $desc
  */
 protected function addEntityIdentifierFieldNames(array &$result, $entityClass, $desc = false)
 {
     $idFieldNames = $this->doctrineHelper->getEntityIdentifierFieldNamesForClass($entityClass);
     foreach ($idFieldNames as $fieldName) {
         $result[] = $desc ? '-' . $fieldName : $fieldName;
     }
 }
Example #2
0
 /**
  * @param string $entityClass
  * @param array  $content
  *
  * @return array
  */
 protected function getGetRequestConfig($entityClass, $content)
 {
     $recordExist = count($content) === 1;
     $recordContent = $recordExist ? $content[0] : [];
     $idFields = $this->doctrineHelper->getEntityIdentifierFieldNamesForClass($entityClass);
     $idFieldCount = count($idFields);
     if ($idFieldCount === 1) {
         // single identifier
         return [$recordExist ? $recordContent[reset($idFields)] : 1, $recordExist];
     } elseif ($idFieldCount > 1) {
         // combined identifier
         $requirements = [];
         foreach ($idFields as $field) {
             $requirements[$field] = $recordExist ? $content[$field] : 1;
         }
         return [implode(RestRequest::ARRAY_DELIMITER, $requirements), $recordExist];
     }
 }
Example #3
0
 /**
  * {@inheritdoc}
  */
 public function process(ContextInterface $context)
 {
     /** @var GetContext $context */
     if ($context->hasQuery()) {
         // a query is already built
         return;
     }
     $entityClass = $context->getClassName();
     if (!$this->doctrineHelper->isManageableEntityClass($entityClass)) {
         // only manageable entities are supported
         return;
     }
     $query = $this->doctrineHelper->getEntityRepositoryForClass($entityClass)->createQueryBuilder('e');
     $this->doctrineHelper->applyCriteria($query, $context->getCriteria());
     $entityId = $context->getId();
     $idFields = $this->doctrineHelper->getEntityIdentifierFieldNamesForClass($entityClass);
     if (count($idFields) === 1) {
         // single identifier
         if (is_array($entityId)) {
             throw new \UnexpectedValueException(sprintf('The entity identifier cannot be an array because the entity "%s" has single primary key.', $entityClass));
         }
         $query->andWhere(sprintf('e.%s = :id', reset($idFields)))->setParameter('id', $entityId);
     } else {
         // combined identifier
         if (!is_array($entityId)) {
             throw new \UnexpectedValueException(sprintf('The entity identifier must be an array because the entity "%s" has composite primary key.', $entityClass));
         }
         $counter = 1;
         foreach ($idFields as $field) {
             if (!array_key_exists($field, $entityId)) {
                 throw new \UnexpectedValueException(sprintf('The entity identifier array must have the key "%s" because ' . 'the entity "%s" has composite primary key.', $field, $entityClass));
             }
             $query->andWhere(sprintf('e.%s = :id%d', $field, $counter))->setParameter(sprintf('id%d', $counter), $entityId[$field]);
             $counter++;
         }
     }
     $context->setQuery($query);
 }
Example #4
0
 /**
  * {@inheritdoc}
  */
 public function process(ContextInterface $context)
 {
     /** @var RelationConfigContext $context */
     $config = $context->getResult();
     if (null !== $config && ConfigUtil::isRelationInitialized($config)) {
         // a config already exists
         return;
     }
     $entityClass = $context->getClassName();
     if (!$this->doctrineHelper->isManageableEntityClass($entityClass)) {
         // only manageable entities are supported
         return;
     }
     if (null === $config) {
         $config = [];
     }
     $targetIdFields = $this->doctrineHelper->getEntityIdentifierFieldNamesForClass($entityClass);
     if (!isset($config[ConfigUtil::EXCLUSION_POLICY])) {
         $config[ConfigUtil::EXCLUSION_POLICY] = ConfigUtil::EXCLUSION_POLICY_ALL;
     }
     $config[ConfigUtil::FIELDS] = count($targetIdFields) === 1 ? reset($targetIdFields) : array_fill_keys($targetIdFields, null);
     $context->setResult($config);
 }
 /**
  * @param array         $definition
  * @param ClassMetadata $metadata
  * @param string        $version
  * @param string[]      $requestType
  * @param array         $extras
  *
  * @return array
  */
 protected function getAssociations(array $definition, ClassMetadata $metadata, $version, array $requestType, array $extras)
 {
     $associations = $metadata->getAssociationMappings();
     foreach ($associations as $fieldName => $mapping) {
         if (!$this->isAssociationCompletionRequired($fieldName, $definition)) {
             continue;
         }
         $identifierFieldNames = $this->doctrineHelper->getEntityIdentifierFieldNamesForClass($mapping['targetEntity']);
         $config = [ConfigUtil::DEFINITION => [ConfigUtil::EXCLUSION_POLICY => ConfigUtil::EXCLUSION_POLICY_ALL, ConfigUtil::FIELDS => count($identifierFieldNames) === 1 ? reset($identifierFieldNames) : array_fill_keys($identifierFieldNames, null)]];
         if (isset($definition[$fieldName]) && is_array($definition[$fieldName])) {
             $config = array_merge_recursive($config, [ConfigUtil::DEFINITION => $definition[$fieldName]]);
         }
         if ($this->exclusionProvider->isIgnoredRelation($metadata, $fieldName)) {
             $config[ConfigUtil::DEFINITION][ConfigUtil::EXCLUDE] = true;
         }
         $definition[$fieldName] = $config;
     }
     return $definition;
 }