Symfony 自定义原则日期时间类型不起作用



我有以下配置,我尝试处理在2008兼容模式下运行的SQL Server 2005,日期时间怪癖。

=== config.yml
# Doctrine Configuration
doctrine:
  dbal:
    types:
      datetime2005: AppBundleORMDBALDateTime2005Type

=== DateTime2005Type.php
namespace AppBundleORMDBAL;
use DoctrineDBALTypesDateTimeType as BaseDateTimeType;
use DoctrineDBALPlatformsAbstractPlatform;
class DateTime2005Type extends BaseDateTimeType
{
    public function convertToDatabaseValue($value, AbstractPlatform $platform)
    {
        die();
    }
}

请注意这个 die(( 在那里。它应该停止执行我的应用程序,对吧?

=== SomeEntity.php
/**
 * @ORMColumn(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. 

所以我的自定义日期时间没有加载,或者我实现错误。请帮忙。

  • 注册自定义原则类型的正确配置是什么?
  • 我应该(重新(实现哪些功能以使教义使用自定义日期时间的格式?

自定义类型仅适用于持久和选择表达式,不适用于WHERE子句。这意味着对象在水化后将具有转换后的值。

从文档中:

使用 DQL 查询时,convertToPHPValueSQL 和 convertToDatabaseValueSQL 方法仅适用于 SELECT 子句中的标识变量和路径表达式。WHERE 子句中的表达式没有换行! 如果要在 WHERE 子句中使用点值,则必须实现用户定义的函数。

也许你可以按照他们的建议使用自定义函数来解决它。

最新更新