Php 使用原则2.1在数据库中保存Zend日期
我想在用条令模式工具创建的数据库中保存一个日期时间。 在我的表单中,我设置了一个日期和时间,并希望将其保存为数据库中的日期时间 所以我试了一下:Php 使用原则2.1在数据库中保存Zend日期,php,zend-framework,doctrine-orm,zend-date,Php,Zend Framework,Doctrine Orm,Zend Date,我想在用条令模式工具创建的数据库中保存一个日期时间。 在我的表单中,我设置了一个日期和时间,并希望将其保存为数据库中的日期时间 所以我试了一下: $e->setStartDateTime(新的Zend_日期('2011-09-01T22:00:00',Zend_日期::DATETIME)) 但我得到了一个错误: PHP Fatal error: Call to undefined method Zend_Date::format() in /var/www/shared/Doctrine/li
$e->setStartDateTime(新的Zend_日期('2011-09-01T22:00:00',Zend_日期::DATETIME))代码>
但我得到了一个错误:
PHP Fatal error: Call to undefined method Zend_Date::format() in /var/www/shared/Doctrine/lib/vendor/doctrine-dbal/lib/Doctrine/DBAL/Types/DateTimeType.php on line 44
有没有人有这方面的经验并且能够帮助我解决这个问题?Doctrine2希望DQL日期和日期时间类型使用PHP日期时间对象
如果您没有被迫使用Zend_日期,请执行以下操作:
->setStartDateTime(new DateTime('2011-09-01T22:00:00'))
否则,请将其转换为日期时间:
new DateTime('@' . $zendDate->getTimestamp())
请参阅文档。您可以实现或使用此实现
您可能会发现这很有帮助。您可以覆盖本机数据类型以使用Zend_Date而不是PHP的本机DateTime,后者是条令数据类型“DateTime”、“time”和“Date”的默认值
首先在应用程序引导文件中,在实例化条令EntityManager之前添加以下内容。本规范应优先于任何其他条令规范:
现在您只需要实现这3个类。最简单的方法是扩展相应的条令类来实现这一点。所有3个类的代码实际上都是相同的,唯一的区别是您从中扩展的类和您的类的名称。以下是DateTimeType类作为示例:
现在您仍然可以在条令中使用@Column(type=“datetime”)注释。保存到数据库时,可以将“datetime”类型的实体属性保存到Zend_日期实例。此外,从数据库中获取实体时,“datetime”类型的属性现在将是Zend_Dates。您必须使用如下反斜杠。。。新建\DateTime()。。。使用全局命名空间。
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');
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;
}
}