0

我试图在 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()')

感谢提前

4

1 回答 1

3

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

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

或使用库中的配置文件

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

->where('YEAR(i.interventionDate) = YEAR(CURRENT_DATE())');
于 2018-10-19T06:37:01.747 回答