コード例 #1
0
 /**
  * {@inheritdoc}
  */
 public function convertToPHPValue($value, AbstractPlatform $platform)
 {
     if ($value === null || $value instanceof DateTime) {
         return $value;
     }
     $val = DateTime::createFromFormat($platform->getTimeFormatString(), $value);
     if (!$val) {
         throw ConversionException::conversionFailedFormat($value, $this->getName(), $platform->getTimeFormatString());
     }
     return $val;
 }
コード例 #2
0
 /**
  * Hydrate $object with the provided $data.
  *
  * @param  array  $data
  * @param  object $object
  * @throws \Exception
  * @return object
  */
 public function hydrate(array $data, $object, $depth = 2)
 {
     $metadata = $this->getEntityManager()->getClassMetadata(get_class($object));
     // process fields
     $fields = $metadata->getFieldNames();
     foreach ($fields as $field) {
         if (isset($data[$field]) && $data[$field] !== null) {
             $type = $metadata->getTypeOfField($field);
             if (in_array($type, array('datetime', 'time', 'date'))) {
                 switch ($type) {
                     case 'datetime':
                         $dt = new DateTime();
                         break;
                     case 'date':
                         $dt = new Date();
                         break;
                     case 'time':
                         $dt = new Time();
                         break;
                 }
                 if (is_int($data[$field])) {
                     $dt->setTimestamp($data[$field]);
                 } elseif (is_string($data[$field])) {
                     $dt->__construct($data[$field]);
                 }
                 $data[$field] = $dt;
             }
         } else {
             unset($data[$field]);
             continue;
         }
     }
     if (!$object instanceof \Doctrine\ORM\Proxy\Proxy) {
         // process associations only if not proxied to prevent mahoosive nesting issues
         $assocs = $metadata->getAssociationNames();
         foreach ($assocs as $assoc) {
             $target = $metadata->getAssociationTargetClass($assoc);
             $value = isset($data[$assoc]) ? $data[$assoc] : null;
             switch ($metadata->getAssociationMapping($assoc)['type']) {
                 case $metadata::ONE_TO_ONE:
                     // 1
                     $data[$assoc] = $this->toOne($value, $target);
                     break;
                 case $metadata::MANY_TO_ONE:
                     // 2
                     // Not hydrating just linking
                     $entity = $this->find($target, $value);
                     $data[$assoc] = $entity;
                     break;
                 case $metadata::ONE_TO_MANY:
                     // 4
                     $data[$assoc] = $this->toMany($value, $target, $object->{$assoc}, $depth);
                     break;
                 case $metadata::MANY_TO_MANY:
                     // 8
                     $data[$assoc] = $this->toMany($value, $target, $object->{$assoc}, $depth);
                     break;
             }
         }
     }
     $reflProperties = self::getReflProperties($object);
     foreach ($data as $key => $value) {
         if (isset($reflProperties[$key])) {
             $reflProperties[$key]->setValue($object, $this->hydrateValue($key, $value));
         }
     }
     return $object;
 }