コード例 #1
0
ファイル: EntityPopulator.php プロジェクト: nbremont/Faker
 public function guessColumnFormatters(\Faker\Generator $generator)
 {
     $formatters = array();
     $class = $this->class;
     $nameGuesser = new \Faker\Guesser\Name($generator);
     $columnTypeGuesser = new ColumnTypeGuesser($generator);
     foreach ($this->class->getFieldNames() as $fieldName) {
         if ($this->class->isIdentifier($fieldName) || !$this->class->hasField($fieldName)) {
             continue;
         }
         if ($formatter = $nameGuesser->guessFormat($fieldName)) {
             $formatters[$fieldName] = $formatter;
             continue;
         }
         if ($formatter = $columnTypeGuesser->guessFormat($fieldName, $this->class)) {
             $formatters[$fieldName] = $formatter;
             continue;
         }
     }
     foreach ($this->class->getAssociationNames() as $assocName) {
         if (!$this->class->isIdentifier($assocName) || !$this->class->isCollectionValuedAssociation($assocName)) {
             continue;
         }
         $relatedClass = $this->class->getAssociationTargetClass($assocName);
         $formatters[$assocName] = function ($inserted) use($relatedClass) {
             return isset($inserted[$relatedClass]) ? $inserted[$relatedClass][mt_rand(0, count($inserted[$relatedClass]) - 1)] : null;
         };
     }
     return $formatters;
 }
コード例 #2
0
ファイル: Entity.php プロジェクト: seytar/psx
 protected function getEntityFields(ClassMetadata $metaData, array $data)
 {
     // change data keys to camelcase
     $result = array();
     foreach ($data as $key => $value) {
         // convert to camelcase if underscore is in name
         if (strpos($key, '_') !== false) {
             $key = implode('', array_map('ucfirst', explode('_', $key)));
         }
         $result[$key] = $value;
     }
     $data = $result;
     // get all fields
     $fieldNames = $metaData->getFieldNames();
     $fields = array();
     foreach ($fieldNames as $fieldName) {
         if (!isset($data[$fieldName])) {
             continue;
         }
         $type = $metaData->getTypeOfField($fieldName);
         $value = $this->getColumnTypeValue($type, $data[$fieldName]);
         $fields[$fieldName] = $value;
     }
     return $fields;
 }
コード例 #3
0
ファイル: Serializer.php プロジェクト: zoopcommerce/shard
 public function fieldList(ClassMetadata $metadata)
 {
     $return = [];
     foreach ($metadata->getFieldNames() as $field) {
         if ($this->isSerializableField($field, $metadata)) {
             $return[] = $field;
         }
     }
     return $return;
 }
コード例 #4
0
ファイル: DoctrineObject.php プロジェクト: eltondias/Relogio
 /**
  * Extract values from an object using a by-reference logic (this means that values are
  * directly fetched without using the public API of the entity, in this case, getters)
  *
  * @param  object $object
  * @return array
  */
 protected function extractByReference($object)
 {
     $fieldNames = array_merge($this->metadata->getFieldNames(), $this->metadata->getAssociationNames());
     $refl = $this->metadata->getReflectionClass();
     $data = array();
     foreach ($fieldNames as $fieldName) {
         $reflProperty = $refl->getProperty($fieldName);
         $reflProperty->setAccessible(true);
         $data[$fieldName] = $this->extractValue($fieldName, $reflProperty->getValue($object));
     }
     return $data;
 }
コード例 #5
0
 /**
  * @param $entity
  * @param ClassMetadata $classMetadata
  * @return array
  */
 private function generateConstructor($entity, $classMetadata)
 {
     $fields = [];
     $fields[] = sprintf("\t\tfunction %s(data) {\n", $entity);
     $fields[] = "\t\t\tif (angular.isDefined(data)) {\n";
     foreach ($classMetadata->getFieldNames() as $item) {
         $item = $this->handleField($item, $classMetadata->getName(), true);
         if ($item !== null) {
             $fields[] = $item;
         }
     }
     $fields[] = "\t\t\t} else {\n";
     foreach ($classMetadata->getFieldNames() as $item) {
         $item = $this->handleField($item, $classMetadata->getName(), false);
         if ($item !== null) {
             $fields[] = $item;
         }
     }
     $fields[] = "\t\t\t}\n";
     $fields[] = "\t\t}\n\n";
     return $fields;
 }
コード例 #6
0
ファイル: Unserializer.php プロジェクト: zoopcommerce/shard
 public function fieldList(ClassMetadata $metadata, $includeId = true)
 {
     $return = [];
     $serializerMetadata = $metadata->getSerializer();
     foreach ($metadata->getFieldNames() as $field) {
         if (isset($serializerMetadata['fields'][$field]['unserializeIgnore']) && $serializerMetadata['fields'][$field]['unserializeIgnore']) {
             continue;
         }
         $return[] = $field;
     }
     if (!$includeId) {
         unset($return[$metadata->getIdentifier()]);
     }
     return $return;
 }
コード例 #7
0
 /**
  * Extract values from an object using a by-reference logic (this means that values are
  * directly fetched without using the public API of the entity, in this case, getters)
  *
  * @param  object $object
  * @return array
  */
 protected function extractByReference($object)
 {
     $fieldNames = array_merge($this->metadata->getFieldNames(), $this->metadata->getAssociationNames());
     $refl = $this->metadata->getReflectionClass();
     $filter = $object instanceof FilterProviderInterface ? $object->getFilter() : $this->filterComposite;
     $data = array();
     foreach ($fieldNames as $fieldName) {
         if ($filter && !$filter->filter($fieldName)) {
             continue;
         }
         $reflProperty = $refl->getProperty($fieldName);
         $reflProperty->setAccessible(true);
         $data[$fieldName] = $this->extractValue($fieldName, $reflProperty->getValue($object), $object);
     }
     return $data;
 }
コード例 #8
0
 /**
  * Returns an array of fields. Fields can be both column fields and
  * association fields.
  *
  * @param ClassMetadata $metadata
  *
  * @return array $fields
  */
 private function getFieldsFromMetadata(ClassMetadata $metadata)
 {
     $fields = (array) $metadata->getFieldNames();
     if (!$this->isIdentifierNatural($metadata)) {
         $fields = array_diff($fields, $metadata->getIdentifier());
     }
     $fieldsMapping = array();
     foreach ($fields as $field) {
         $fieldsMapping[$field] = $metadata->getTypeOfField($field);
     }
     foreach ($metadata->associationMappings as $fieldName => $relation) {
         if ($relation['type'] !== ORMClassMetadataInfo::ONE_TO_MANY) {
             $fieldsMapping[$fieldName] = 'relation';
         }
     }
     return $fieldsMapping;
 }
コード例 #9
0
 /**
  * Get the default hydrator
  *
  * @param ClassMetadata     $metadata
  * @param HydratorInterface $hydrator
  *
  * @return HydratorInterface
  */
 private function createEntityHydrator(ClassMetadata $metadata, HydratorInterface $hydrator = null)
 {
     $hydrator = $hydrator ?: new ClassMethods();
     foreach ($metadata->getFieldNames() as $field) {
         switch ($metadata->getTypeOfField($field)) {
             case Type::DATETIME:
                 $hydrator->addStrategy($field, new DateTimeStrategy());
                 break;
             case Type::SIMPLE_ARRAY:
                 $hydrator->addStrategy($field, new SimpleArrayStrategy());
                 break;
             case Type::BOOLEAN:
                 $hydrator->addStrategy($field, new BooleanStrategy());
                 break;
         }
     }
     return $hydrator;
 }
コード例 #10
0
 /**
  * @param \Doctrine\Common\Persistence\Mapping\ClassMetadata $metadata
  * @param                                                    $model
  *
  * @return array
  */
 protected function processFieldNames(ClassMetadata $metadata, $model)
 {
     $data = array();
     foreach ($metadata->getFieldNames() as $fieldName) {
         if ($metadata->isIdentifier($fieldName) && $metadata->usesIdGenerator()) {
             continue;
         }
         $data[$fieldName] = $this->navigator->accept($this->getVisitor(), $this->readProperty($model, $fieldName));
     }
     return $data;
 }
コード例 #11
0
 /**
  * Returns the entity embeddable fields
  *
  * @param ClassMetadata $metadata
  *
  * @return array
  */
 protected function getEntityEmbeddables(ClassMetadata $metadata)
 {
     $entityFields = $metadata->getFieldNames();
     $embeddables = [];
     foreach ($entityFields as $embeddableField) {
         if (false !== strpos($embeddableField, '.')) {
             list($embeddablePropertyName, ) = explode('.', $embeddableField);
             $embeddables[$embeddablePropertyName] = $embeddablePropertyName;
         }
     }
     return $embeddables;
 }
コード例 #12
0
 protected function prepareMetadataFields(ClassMetadata $metadata)
 {
     $fields = [];
     foreach ($metadata->getFieldNames() as $fieldName) {
         $groups = [];
         list($realName, ) = explode('.', $fieldName);
         if (!in_array($realName, $this->hiddenFields)) {
             $groups = ['default', Inflector::tableize($metadata->getReflectionClass()->getShortName())];
         }
         $fields[$realName]['groups'] = $groups;
     }
     return $fields;
 }
コード例 #13
0
 /**
  * @param Common\Persistence\Mapping\ClassMetadata $class
  *
  * @return array
  *
  * @throws ORM\Mapping\MappingException
  */
 private function buildPhoneFields(Common\Persistence\Mapping\ClassMetadata $class)
 {
     $phoneFields = [];
     foreach ($class->getFieldNames() as $fieldName) {
         $mapping = $class->getFieldMapping($fieldName);
         if ($mapping['type'] !== Types\Phone::PHONE) {
             continue;
         }
         $classReflection = $class->isInheritedField($fieldName) ? new \ReflectionClass($mapping['declared']) : $class->getReflectionClass();
         $phoneFields[$fieldName] = ['phoneFieldClass' => $classReflection->getName()];
     }
     return $phoneFields;
 }
コード例 #14
0
ファイル: EntityPopulator.php プロジェクト: brainrepo/Faker
 /**
  * @param \Faker\Generator $generator
  * @return array
  */
 public function guessColumnFormatters(\Faker\Generator $generator)
 {
     $formatters = array();
     $nameGuesser = new \Faker\Guesser\Name($generator);
     $columnTypeGuesser = new ColumnTypeGuesser($generator);
     foreach ($this->class->getFieldNames() as $fieldName) {
         if ($this->class->isIdentifier($fieldName) || !$this->class->hasField($fieldName)) {
             continue;
         }
         $size = isset($this->class->fieldMappings[$fieldName]['length']) ? $this->class->fieldMappings[$fieldName]['length'] : null;
         if ($formatter = $nameGuesser->guessFormat($fieldName, $size)) {
             $formatters[$fieldName] = $formatter;
             continue;
         }
         if ($formatter = $columnTypeGuesser->guessFormat($fieldName, $this->class)) {
             $formatters[$fieldName] = $formatter;
             continue;
         }
     }
     foreach ($this->class->getAssociationNames() as $assocName) {
         if ($this->class->isCollectionValuedAssociation($assocName)) {
             continue;
         }
         $relatedClass = $this->class->getAssociationTargetClass($assocName);
         $unique = $optional = false;
         if ($this->class instanceof \Doctrine\ORM\Mapping\ClassMetadata) {
             $mappings = $this->class->getAssociationMappings();
             foreach ($mappings as $mapping) {
                 if ($mapping['targetEntity'] == $relatedClass) {
                     if ($mapping['type'] == \Doctrine\ORM\Mapping\ClassMetadata::ONE_TO_ONE) {
                         $unique = true;
                         $optional = isset($mapping['joinColumns'][0]['nullable']) ? $mapping['joinColumns'][0]['nullable'] : false;
                         break;
                     }
                 }
             }
         } elseif ($this->class instanceof \Doctrine\ODM\MongoDB\Mapping\ClassMetadata) {
             $mappings = $this->class->associationMappings;
             foreach ($mappings as $mapping) {
                 if ($mapping['targetDocument'] == $relatedClass) {
                     if ($mapping['type'] == \Doctrine\ODM\MongoDB\Mapping\ClassMetadata::ONE && $mapping['association'] == \Doctrine\ODM\MongoDB\Mapping\ClassMetadata::REFERENCE_ONE) {
                         $unique = true;
                         $optional = isset($mapping['nullable']) ? $mapping['nullable'] : false;
                         break;
                     }
                 }
             }
         }
         $index = 0;
         $formatters[$assocName] = function ($inserted) use($relatedClass, &$index, $unique, $optional) {
             if (isset($inserted[$relatedClass])) {
                 if ($unique) {
                     $related = null;
                     if (isset($inserted[$relatedClass][$index]) || !$optional) {
                         $related = $inserted[$relatedClass][$index];
                     }
                     $index++;
                     return $related;
                 }
                 return $inserted[$relatedClass][mt_rand(0, count($inserted[$relatedClass]) - 1)];
             }
             return null;
         };
     }
     return $formatters;
 }