2016-02-15 2 views
1

У меня есть следующая конфигурация, где я пытаюсь обрабатывать SQL Server 2008, запущенный в 2005 году, режим совместимости, datetime quirks.Symfony custom doctrine datetime type not working

=== config.yml 
# Doctrine Configuration 
doctrine: 
    dbal: 
    types: 
     datetime2005: AppBundle\ORM\DBAL\DateTime2005Type 



=== DateTime2005Type.php 
namespace AppBundle\ORM\DBAL; 

use Doctrine\DBAL\Types\DateTimeType as BaseDateTimeType; 
use Doctrine\DBAL\Platforms\AbstractPlatform; 

class DateTime2005Type extends BaseDateTimeType 
{ 
    public function convertToDatabaseValue($value, AbstractPlatform $platform) 
    { 
     die(); 
    } 
} 

Обратите внимание, этот кубик() там. Это должно прекратить выполнение моего приложения, верно?

=== SomeEntity.php 
/** 
* @ORM\Column(name="ErzDate", type="datetime2005", nullable=true) 
*/ 
private $createdAt; 

сс

=== Rendered SQL & error: 
An exception occurred while executing 'SELECT count(DISTINCT m0_.Ident) AS sclr0 FROM MedionOA3Requests m0_ WHERE m0_.Project LIKE ? AND m0_.ErzDate IS NOT NULL AND m0_.ErzDate >= ?' with params ["MANUALQUERY", "2016-02-13 00:00:00"]: 

SQLSTATE [22007, 242]: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Bei der Konvertierung eines nvarchar-Datentyps in einen datetime-Datentyp liegt der Wert außerhalb des gültigen Bereichs. 

Так что мой заказ дата и время не было загружена или я реализацией это неправильно. Пожалуйста помоги.

  • Что такое надлежащая конфигурация для регистрации пользовательских типов доктрины?
  • Какие функции я должен использовать (re), чтобы заставить Doctrine использовать настраиваемый формат для datetime?

ответ

2

Пользовательские типы работают только для сохранения и выбора выражений, а не для WHERE статей. Это означает, что объект будет иметь преобразованное значение после гидратации.

From the docs:

При использовании DQL запросов, методы convertToPHPValueSQL и convertToDatabaseValueSQL применяются только к идентификации переменных и выражений пути в SELECT, статей. Выражения в предложениях WHERE не завернуты! Если вы хотите использовать значения Point в предложениях WHERE, вы должны реализовать определенную пользователем функцию.

Возможно, вы можете решить эту проблему using a custom function, как они предлагают.

+0

: Facepalm: Да. Вот и все. В моем репо для этой сущности я вставлял дату вручную в 'Where'. Исправлено это, и он снова работает. Большой thx. –