2

我添加了以下查询扩展:

<?php

/*
 * DoctrineExtensions Mysql Function Pack
 *
 * LICENSE
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to kontakt@beberlei.de so I can send you a copy immediately.
 */

namespace MyApp\MainBundle\DQL;

use Doctrine\ORM\Query\Lexer;
use Doctrine\ORM\Query\AST\Functions\FunctionNode;

/**
 * "DAY" "(" SimpleArithmeticExpression ")". Modified from DoctrineExtensions\Query\Mysql\Year
 *
 * @category    DoctrineExtensions
 * @package     DoctrineExtensions\Query\Mysql
 * @author      Rafael Kassner <kassner@gmail.com>
 * @author      Sarjono Mukti Aji <me@simukti.net>
 * @license     MIT License
 */
class Day extends FunctionNode
{
    public $date;

    /**
     * @override
     */
    public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
    {
        return "DAY(" . $sqlWalker->walkArithmeticPrimary($this->date) . ")";
    }

    /**
     * @override
     */
    public function parse(\Doctrine\ORM\Query\Parser $parser)
    {
        $parser->match(Lexer::T_IDENTIFIER);
        $parser->match(Lexer::T_OPEN_PARENTHESIS);

        $this->date = $parser->ArithmeticPrimary();

        $parser->match(Lexer::T_CLOSE_PARENTHESIS);
    }
}

我想在一个组中使用它,所以在一个查询中我做了:

->addGroupBy('DAY(v.created)')  

但是它总是给我一个错误:

[Semantical Error] line 0, col 90 near 'DAY(v.create': Error: Cannot group by undefined identification or result variable.

为什么是这样?

4

2 回答 2

1

如果要对其进行 GROUP BY(或 ORDER BY),则必须在 SELECT 部分中添加计算值。使用关键字 HIDDEN在获取的结果中忽略此字段!

$qb
    // select...
    ->addSelect('DAY(v.created) AS HIDDEN myGroupByField')
    // ...
    ->groupBy('myGroupByField')
;
于 2013-10-29T08:56:46.623 回答
1

自此提交以来:https ://github.com/doctrine/doctrine2/commit/2642daa43851878688d01625f272ff5874cac7b2

这个问题通过 SelectExpression + Hidden + ResultVariable 参考解决。

SELECT 
    ..., DAY(t.scheduledDate) AS myDay
FROM Task t
    ...
WHERE
    ...
GROUP BY
    myDay
于 2013-10-29T08:54:59.193 回答