我有以下配置,我尝试处理在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 子句中使用点值,则必须实现用户定义的函数。
也许你可以按照他们的建议使用自定义函数来解决它。