【问题标题】:SQL future dates in request请求中的 SQL 未来日期
【发布时间】:2015-06-10 13:22:31
【问题描述】:

我正在尝试执行 SQL 请求以获取所有未来事件。

到目前为止,它看起来像这样:

$dql   = "SELECT a FROM AOFVHFlyBundle:Flight a WHERE precisedate >= NOW()";
$query = $em->createQuery($dql);

但我收到以下错误:

line 0, col 59: Error: Expected known function, got 'NOW'

我怎样才能获得所有未来的航班?

【问题讨论】:

  • 尝试使用CURRENT_TIMESTAMP() 而不是NOW()
  • 嗨@Pierre Olivier Tran,如果我的或任何答案解决了您的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。

标签: php sql database symfony doctrine-orm


【解决方案1】:

您要查找的 DQL 函数是 CURRENT_TIMESTAMP()。如doc 中所述。

【讨论】:

    【解决方案2】:

    尝试使用不带括号的 CURRENT_TIMESTAMP。

    【讨论】:

      【解决方案3】:

      如果您有兴趣,可以创建自己的 DQL 函数。只是另一种选择。

      完整示例:How to create and use custom built doctrine DQL function in symfony

      # sport/src/Football/FrontendBundle/DQL/NowTs.php
      namespace Football\FrontendBundle\DQL;
      
      use Doctrine\ORM\Query\AST\Functions\FunctionNode;
      use Doctrine\ORM\Query\Lexer;
      use Doctrine\ORM\Query\Parser;
      use Doctrine\ORM\Query\SqlWalker;
      
      class NowTs extends FunctionNode
      {
          public function parse(Parser $parser)
          {
              $parser->match(Lexer::T_IDENTIFIER);
              $parser->match(Lexer::T_OPEN_PARENTHESIS);
              $parser->match(Lexer::T_CLOSE_PARENTHESIS);
          }
      
          public function getSql(SqlWalker $sqlWalker)
          {
              return 'NOW()';
          }
      }
      

      在您的查询中:

      ->where('..... < NOW() ....')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-02
        • 1970-01-01
        相关资源
        最近更新 更多