public static function getResourceType($entityManager, ClassMetadata $meta, $level = 0) { if (isset(self::$resourceTypes[$meta->getName()])) { return self::$resourceTypes[$meta->getName()]; } $refClass = $meta->getReflectionClass(); $namespace = null; $resourceType = new ResourceType($refClass, ResourceTypeKind::ENTITY, $refClass->getShortName(), $namespace); $addedProperties = array(); foreach ($meta->fieldMappings as $fieldName => $data) { $type = $resourceType->getPrimitiveResourceType(DataTypeMapper::fromDoctrineToOData($data['type'])); $kind = ResourcePropertyKind::PRIMITIVE; $resourceProperty = new ResourceProperty($fieldName, null, $kind, $type); $resourceType->addProperty($resourceProperty); $addedProperties[$fieldName] = $resourceProperty; } if ($level < self::LEVEL_MAX) { foreach ($meta->associationMappings as $fieldName => $data) { if ($associationMeta = $entityManager->getClassMetadata($data['targetEntity'])) { $type = self::getResourceType($entityManager, $associationMeta, self::$level++); $kind = ResourcePropertyKind::RESOURCE_REFERENCE; $resourceProperty = new ResourceProperty($fieldName, null, $kind, $type); $resourceType->addProperty($resourceProperty); $fkFieldName = self::getForeignKeyFieldName($data, $entityManager); if (!$fkFieldName) { $fkFieldName = $data['fieldName'] . 'Id'; } if ($fkFieldName) { if (!isset($addedProperties[$fkFieldName])) { //* $type = $resourceType->getPrimitiveResourceType(DataTypeMapper::fromDoctrineToOData('integer')); $kind = ResourcePropertyKind::PRIMITIVE; $resourceProperty = new ResourceProperty($fkFieldName, null, $kind, $type); $resourceType->addProperty($resourceProperty); $addedProperties[$fieldName] = $resourceProperty; //*/ } } // break; } } } self::$level = 1; return self::$resourceTypes[$meta->getName()] = $resourceType; }
private function getResourceType() { // $entity = $this->getRootEntity(); $meta = $this->getClassMetadata(); return ResourceType::getResourceType($this->getEntityManager(), $meta); }