【问题标题】:YEAR(CURDATE() in DQL (Doctrine Query Language)DQL(学说查询语言)中的 YEAR(CURDATE()
【发布时间】:2017-05-16 08:37:17
【问题描述】:

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'

【问题讨论】:

    标签: symfony dql


    【解决方案1】:

    终于找到答案了:

    要获得学说使用的当前年份:

    SUBSTRING(CURRENT_DATE(),1,4)
    

    来源

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

    【讨论】:

      【解决方案2】:

      为此,您必须在教义中添加一些额外的功能。

      这里有一些链接,可以满足您的需求。 https://github.com/luxifer/doctrine-functions.

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

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

      【讨论】:

      • 我看到这是您的第一个答案。伟大的开始!谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-21
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多