/** * {@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; }
/** * 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; }