Crie um tipo DBAL personalizado estendendo o
DateTimeType
e substituir o convertToPHPValue
função (eu copiei o VarDateTimeType
class, que não conseguiu converter com sucesso o tipo de data que minha instalação do Oracle estava usando):<?php
namespace YourCompany\SomeBundle\Doctrine\DBAL\Types;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Types\ConversionException;
use Doctrine\DBAL\Types\DateTimeType;
class SillyDateTimeType extends DateTimeType
{
/**
* {@inheritdoc}
* @throws \Doctrine\DBAL\Types\ConversionException
*/
public function convertToPHPValue($value, AbstractPlatform $platform)
{
if ($value === null || $value instanceof \DateTime) {
return $value;
}
$val = \DateTime::createFromFormat('d-M-y H.i.s.u A', $value);
if ( ! $val instanceof \DateTime) {
throw ConversionException::conversionFailed($value, $this->getName());
}
return $val;
}
}
Substitua
$val = \DateTime::createFromFormat('d-M-y H.i.s.u A', $value);
com qualquer formato que sua instalação esteja retornando para essas colunas. Em seguida, basta registrá-lo em
dbal
em config.yml
:# app/config/config.yml
doctrine:
dbal:
types:
sillydatetime: YourCompany\SomeBundle\Doctrine\DBAL\Types\SillyDateTimeType
Agora você pode usar
sillydatetime
(ou o que você chamar) em qualquer lugar nas especificações do tipo de coluna.