/** * Adds remote entities relations to $className entity into $result * * @param array $result * @param string $className * @param bool $withEntityDetails * @param bool $applyExclusions * @param bool $translate */ protected function addUnidirectionalRelations(array &$result, $className, $withEntityDetails, $applyExclusions, $translate) { $relations = $this->getUnidirectionalRelations($className); foreach ($relations as $name => $mapping) { $relatedClassName = $mapping['sourceEntity']; $fieldName = $mapping['fieldName']; $metadata = $this->getMetadataFor($relatedClassName); $labelType = $mapping['type'] & ClassMetadataInfo::TO_ONE ? 'label' : 'plural_label'; if (!$this->entityConfigProvider->hasConfig($relatedClassName, $fieldName)) { // skip non configurable relation continue; } if ($this->isIgnoredRelation($metadata, $fieldName)) { continue; } if ($applyExclusions && $this->exclusionProvider->isIgnoredRelation($metadata, $fieldName)) { continue; } $labelKey = $this->entityConfigProvider->getConfig($relatedClassName, $fieldName)->get('label'); $labelTypeKey = $this->entityConfigProvider->getConfig($relatedClassName)->get($labelType); if ($translate) { $labelKey = $this->translator->trans($labelKey); $labelTypeKey = $this->translator->trans($labelTypeKey); } $label = sprintf('%s (%s)', $labelKey, $labelTypeKey); $fieldType = $this->getRelationFieldType($relatedClassName, $fieldName); $this->addRelation($result, $name, $fieldType, $label, $this->getRelationType($fieldType), $relatedClassName, $withEntityDetails, $translate, false); } }
/** * Adds remote entities relations to $className entity into $result * * @param array $result * @param string $className * @param EntityManager $em * @param bool $withEntityDetails * @param bool $applyExclusions * @param bool $translate */ protected function addUnidirectionalRelations(array &$result, $className, EntityManager $em, $withEntityDetails, $applyExclusions, $translate) { $relations = $this->getUnidirectionalRelations($em, $className); foreach ($relations as $name => $mapping) { $relatedClassName = $mapping['sourceEntity']; $fieldName = $mapping['fieldName']; $metadata = $em->getClassMetadata($relatedClassName); $labelType = $mapping['type'] & ClassMetadataInfo::TO_ONE ? 'label' : 'plural_label'; if (!$this->entityConfigProvider->hasConfig($metadata->getName(), $fieldName)) { // skip non configurable relation continue; } if ($this->isIgnoredRelation($metadata, $fieldName)) { continue; } if ($applyExclusions && $this->exclusionProvider->isIgnoredRelation($metadata, $fieldName)) { continue; } if ($translate) { $label = $this->translator->trans($this->entityConfigProvider->getConfig($relatedClassName, $fieldName)->get('label')) . ' (' . $this->translator->trans($this->entityConfigProvider->getConfig($relatedClassName)->get($labelType)) . ')'; } else { $label = $this->entityConfigProvider->getConfig($relatedClassName, $fieldName)->get('label') . ' (' . $this->entityConfigProvider->getConfig($relatedClassName)->get($labelType) . ')'; } $fieldType = $this->getRelationFieldType($relatedClassName, $fieldName); $this->addRelation($result, $name, $fieldType, $label, $this->getRelationType($fieldType), $relatedClassName, $withEntityDetails, $translate); } }
/** * @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; }