学说当年

Current year with Doctrine

我试图在查询构建器中使用 Doctrine 2 的 where 条件中的当前年份,但不可能。使用 My SQL 没问题,但与 Doctrine 无关,它不起作用。那么有人可以帮我解决这个问题吗?

我试过了(一个接一个):

->where('year = CURRENT_TIMESTAMP()')

->where('SUBSTRING(i.interventionDate),1,4) = CURRENT_DATE()')

->where('Year(i.interventionDate) = YEAR(CURDATE()')

->where($qb->expr()->gt('i.interventionDate', 'CURRENT_TIMESTAMP()'))

->where('SUBSTRING(i.interventionDate), 1,4) =  CURRENT_TIMESTAMP()')

感谢提前

MySQL 的一些 Date 功能是特定于平台的,而 Doctrine 是对多个平台的抽象。这就是为什么他们不支持开箱即用的 YEAR() 功能。您可以编写自定义逻辑或使用 beberlei/DoctrineExtensions 将这些和其他 mysql 特定的功能添加到您的设置中。安装捆绑包,然后在 config.yml 的学说配置中通过将函数名称映射到相应的 class 添加新的 dql 类型,如下所示:

doctrine:
    orm:
        dql:
            datetime_functions:
                date: DoctrineExtensions\Query\Mysql\Date
                ...

或使用 config file from the library.

之后您可以编写查询将当前日期和 table 中的日期都转换为年份并进行比较,如下所示:

->where('YEAR(i.interventionDate) = YEAR(CURRENT_DATE())');