原则 2:无法更新 SQL Server 2008apm 上的 DateTime 列

我在 apache 服务器上使用 Doctrine 2.2 和 php 5.3.

I'm using Doctrine 2.2 with php 5.3 on an apache server.

到目前为止,我偶然发现了以下问题:当我尝试更新日期时间列时,我得到:SQLSTATE[22007]:[Microsoft][SQL Server Native Client 10.0][SQL Server]从字符串转换日期和/或时间时转换失败.

So far I've stumbled upon the following problem: When I try to update a datetime column I get: SQLSTATE[22007]: [Microsoft][SQL Server Native Client 10.0][SQL Server]Conversion failed when converting date and/or time from character string.

到目前为止,我什至已经进入该列,然后使用它只添加了 1 天来设置新日期......同样的结果.

I've even gone so far to make a get onto the column and then use that with only 1 day added to it to set the new date......same result.

当我将数据库中的列和实体中的列从日期时间更改为日期时,它按预期运行.

When I instead change both the column in the database and in the entity from datetime to date, it functions as intended.

我的主要问题是,有几个字段我需要使用日期时间列.

My main problem is, that there are a few fields where I will NEED to use a datetime column.

这是我的代码:

(birthdate 是我更改为 date 的栏目......并且是为数不多的对我来说可能的栏目之一):

(birthdate was the column I changed to date....and is one of the few columns where that is possible for me):

//This returns the datetime object that represents birthdate from the database 
$help=$object->getBirthDate(); 
$help->setTimestamp(mktime($time[0],$time[1],$time[2],$date[2],$date[1],$date[0])); 
$help->format(DateTime::ISO8601); 
$object->setBirthDate($help);

有人知道这里的解决方法吗?

Does someone know a workaround here?

推荐答案

我在使用 Doctrine 2.5 和 SQL Server 2012 时遇到了这个问题.问题是数据库字段类型为 DATETIME,但是 doctirne仅在 SQLServer2008Platform 及更高版本上支持 DATETIME2.

I ran into this problem with Doctrine 2.5 and SQL Server 2012. The problem is that the database field is type DATETIME, but doctirne only supports DATETIME2 on SQLServer2008Platform and up.

您不应该在您的供应商目录中编辑文件.正确的答案是创建一个自定义类型:Doctrine 自定义映射类型.就我而言,我扩展了当前的 DateTimeType:

You should not be editing files in your vendor directory. The correct answer is to create a custom type: Doctrine Custom Mapping Types. In my case, I extended the current DateTimeType:

<?php

namespace AppBundleDoctrineType;

use DoctrineDBALTypesDateTimeType;
use DoctrineDBALPlatformsAbstractPlatform;

class DateTime extends DateTimeType
{
    private $dateTimeFormatString = 'Y-m-d H:i:s.000';

    public function convertToDatabaseValue($value, AbstractPlatform $platform)
    {
        return ($value !== null)
            ? $value->format($this->dateTimeFormatString) : null;
    }

}

然后在 Symfony config.yml 中:

And then in the Symfony config.yml:

    types:
      datetime: AppBundleDoctrineTypeDateTime

相关文章