Doctrine 2: невозможно обновить DateTime coloumn на SQL Server 2008apm

Я использую Doctrine 2.2 с php 5.3 на сервере Apache.

До сих пор я наткнулся на следующую проблему: когда я пытаюсь обновить столбец datetime, я получаю: SQLSTATE [22007]: [Microsoft] [Собственный клиент SQL Server 10.0] [SQL Server] Не удалось конвертировать при конвертировании даты и / или времени из символьной строки.

Я даже зашел так далеко, чтобы попасть в столбец, а затем использовать его, добавив только один день, чтобы установить новую дату …… тот же результат.

Когда я вместо этого изменяю как столбец в базе данных, так и в сущности от даты и времени до даты, он работает по назначению.

Моя основная проблема заключается в том, что есть несколько полей, где мне НЕОБХОДИМО использовать столбец datetime.

Вот мой код:

(дата рождения была столбец, который я изменил на сегодняшний день …. и является одним из немногих столбцов, где это возможно для меня):

//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); 

Кто-нибудь знает об этом?

Любая помощь здесь очень ценится.

Related of "Doctrine 2: невозможно обновить DateTime coloumn на SQL Server 2008apm"

Его официальная ошибка в Доктрине 2.2, которая будет решена в 2.3.

Микросекунды выдаются в строку с неправильным количеством нулей.

Обход проблемы: измените функцию convertToDatabaseValue в файле /Doctrine/DBAL/Types/DateTimeType.php:

 public function convertToDatabaseValue($value, AbstractPlatform $platform) { if( $value === null) return null; $value = $value->format($platform->getDateTimeFormatString()); if( strlen($value) == 26 && $platform->getDateTimeFormatString() == 'Ymd H:i:su' && ($platform instanceof \Doctrine\DBAL\Platforms\SQLServer2008Platform || $platform instanceof \Doctrine\DBAL\Platforms\SQLServer2005Platform ) ) $value = substr($value, 0, \strlen($value)-3); return $value; } 

Я столкнулся с этой проблемой с Doctrine 2.5 и SQL Server 2012. Проблема в том, что поле базы данных является типом DATETIME , но doctirne поддерживает только DATETIME2 на платформе SQLServer2008 и выше.

Вам не следует редактировать файлы в каталоге поставщика. Правильный ответ заключается в создании настраиваемого типа: пользовательские типы отображения Doctrine . В моем случае я расширил текущий DateTimeType:

 <?php namespace AppBundle\Doctrine\Type; use Doctrine\DBAL\Types\DateTimeType; use Doctrine\DBAL\Platforms\AbstractPlatform; class DateTime extends DateTimeType { private $dateTimeFormatString = 'Ymd H:i:s.000'; public function convertToDatabaseValue($value, AbstractPlatform $platform) { return ($value !== null) ? $value->format($this->dateTimeFormatString) : null; } } 

А затем в Symfony config.yml:

  types: datetime: AppBundle\Doctrine\Type\DateTime 

Какую ценность вы передаете в поле datetime ? Вы должны передать экземпляр Datetime

 $entity->setDate(new \Datetime());