SQL请求中的SQL未来日期

时间:2015-06-10 13:22:32

标签: php sql database symfony doctrine-orm

我尝试执行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'

我如何获得未来的所有航班?

3 个答案:

答案 0 :(得分:2)

您正在寻找的DQL函数是CURRENT_TIMESTAMP()。如doc

中所述

答案 1 :(得分:1)

尝试使用CURRENT_TIMESTAMP无括号。

答案 2 :(得分:0)

如果您有兴趣,可以创建自己的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() ....')