Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用原则2.1在数据库中保存Zend日期_Php_Zend Framework_Doctrine Orm_Zend Date - Fatal编程技术网

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;
    }

}