我添加了以下查询扩展名:
<?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.
为什么会这样?
答案 0 :(得分:1)
自此提交以来:https://github.com/doctrine/doctrine2/commit/2642daa43851878688d01625f272ff5874cac7b2
此问题通过SelectExpression + Hidden + ResultVariable refer。
解决SELECT
..., DAY(t.scheduledDate) AS myDay
FROM Task t
...
WHERE
...
GROUP BY
myDay
答案 1 :(得分:1)
如果要对GROUP BY(或ORDER BY)进行GROUP BY(或ORDER BY),则必须在SELECT部分中添加计算值。 使用关键字HIDDEN 在提取的结果中忽略此字段!
$qb
// select...
->addSelect('DAY(v.created) AS HIDDEN myGroupByField')
// ...
->groupBy('myGroupByField')
;