您可以覆蓋本機數據類型以使用Zend_Date而不是PHP的本機DateTime,它是Doctrine數據類型'datetime','time'和'date'的默認值。
首先在您的應用程序Bootstrap文件中添加以下內容,然後再實例化您的Doctrine EntityManager。此代碼應出現在任何其他學說代碼:
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班。爲了實現這一點,擴展相應的Doctrine類是最簡單的。代碼對於所有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(類型=「日期時間」)註解。保存到數據庫時,可以將類型「datetime」的實體屬性保存爲Zend_Date實例。另外,當從數據庫中抓取實體時,類型「datetime」的屬性現在將成爲Zend_Dates。
你必須使用這樣的反斜槓... new \ DateTime()...來使用全局命名空間。 – PachinSV
僅當您的代碼是命名空間時;) – arnaud576875