本学年

时间:2018-10-19 05:39:06

标签: symfony doctrine-orm doctrine query-builder year2038

我尝试使用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()')

感谢前进

2 个答案:

答案 0 :(得分:3)

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

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

或使用config file from the library

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

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

答案 1 :(得分:0)

$date = new \DateTime();
$year = $date->format('Y');

where('year = :year')->setParameter('year');