YEAR(CURDATE() in DQL (Doctrine Query Language)

YEAR(CURDATE() in DQL (Doctrine Query Language)

MySQL中有YEAR(CURDATE()

mysql> SELECT YEAR(CURDATE());
+-----------------+
| YEAR(CURDATE()) |
+-----------------+
|            2017 |
+-----------------+

如何在DQL中获取?直接使用

$er->createQueryBuilder('s')
   ->where('s.year = YEAR(CURDATE()');

我获得:

[Syntax Error] line 0, col 105: Error: Expected known function, got 'YEAR'

我在努力

SUBSTRING(CURDATE(),1,4);

在纯 MySQL 中再次正常工作,但在 DQL 中我现在有错误

[Syntax Error] line 0, col 115: Error: Expected known function, got 'CURDATE'

类似的结果:

SUBSTRING(NOW(),1,4);

我的意思是它在 MySQL 中有效,但在学说中以例外结尾:

[Syntax Error] line 0, col 115: Error: Expected known function, got 'NOW'

终于找到答案了:

要获取学说使用的当年:

SUBSTRING(CURRENT_DATE(),1,4)

来源

How can I use now() in Doctrine 2 DQL?

为此,您必须向学说添加一些额外的功能。

这里是 link 一些可以满足您需要的东西。 https://github.com/luxifer/doctrine-functions.

但是,您可能最好使用 php DateTime 对象或 date() 来获取当前年份,并将其作为参数传入 例如

$er->createQueryBuilder('s')
->where('s.year', date('Y'));