Tạo Loại DBAL tùy chỉnh mở rộng DateTimeType
và ghi đè convertToPHPValue
(Tôi đã sao chép VarDateTimeType
lớp, không thể chuyển đổi thành công loại Ngày mà cài đặt Oracle của tôi đang sử dụng):
<?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;
}
}
Thay thế $val = \DateTime::createFromFormat('d-M-y H.i.s.u A', $value);
với bất kỳ định dạng nào mà cài đặt của bạn sẽ trả về cho các cột đó.
Sau đó, chỉ cần đăng ký nó theo dbal
trong config.yml
:
# app/config/config.yml
doctrine:
dbal:
types:
sillydatetime: YourCompany\SomeBundle\Doctrine\DBAL\Types\SillyDateTimeType
Giờ đây, bạn có thể sử dụng sillydatetime
(hoặc bất cứ điều gì bạn gọi nó) ở bất kỳ đâu trong thông số kỹ thuật loại cột của bạn.