Вы можете переопределить собственные типы данных, чтобы использовать Zend_Date вместо собственного DateTime в PHP, который используется по умолчанию для типов данных Doctrine «datetime», «time» и «date».
Сначала в файле Bootstrap вашего приложения добавьте следующее, ДО создания экземпляра Doctrine EntityManager. Этот код должен предшествовать любому другому коду Doctrine:
Doctrine\DBAL\Types\Type::overrideType('datetime', 'yournamespace\types\DateTimeType');
Doctrine\DBAL\Types\Type::overrideType('date', 'yournamespace\types\DateType');
Doctrine\DBAL\Types\Type::overrideType('time', 'yournamespace\types\Time');
Теперь вам просто нужно реализовать 3 класса. Для этого проще всего расширить соответствующие классы Доктрины. Код фактически одинаков для всех трех классов, единственное отличие состоит в том, какой класс вы расширяете, и в названии вашего класса. Вот класс DateTimeType в качестве примера:
namespace yournamespace\type;
use Doctrine\DBAL\Types\DateTimeType as DoctrineDateTimeType;
use Doctrine\DBAL\Platforms\AbstractPlatform;
/**
* Override 'datetime' type in Doctrine to use Zend_Date
*/
class DateTimeType extends DoctrineDateTimeType
{
/**
* Convert from db to Zend_Date
*
* @param string $value
* @param AbstractPlatform $platform
* @return \Zend_Date|null
*/
public function convertToPhpValue($value, AbstractPlatform $platform)
{
if (is_null($value)) {
return null;
}
\Zend_Date::setOptions(array('format_type' => 'php', ));
$phpValue = new \Zend_Date($value, $platform->getDateTimeFormatString());
\Zend_Date::setOptions(array('format_type' => 'iso', ));
return $phpValue;
}
/**
* Convert from Zend_Date to db
*
* @param string $value
* @param AbstractPlatform $platform
* @return string|null
*/
public function convertToDatabaseValue($value, AbstractPlatform $platform)
{
if (is_null($value)) {
return null;
}
\Zend_Date::setOptions(array('format_type' => 'php', ));
$dbValue = $value->toString($platform->getDateTimeFormatString());
\Zend_Date::setOptions(array('format_type' => 'iso', ));
return $dbValue;
}
}
Теперь вы можете использовать аннотации @Column (type = "datetime") в Doctrine. При сохранении в базе данных вы можете сохранять свойства сущностей типа «datetime» в экземплярах Zend_Date. Также при извлечении сущностей из базы данных свойства типа "datetime" теперь будут иметь Zend_Dates.