我正在尝试执行此查询:
public function historyLoginAction() {
$em = $this->get('doctrine.orm.entity_manager');
$em->getConfiguration()->addCustomDatetimeFunction('DATE', 'TB\UserBundle\DQLFunctions\DateFunction');
$dql = "SELECT COUNT(u.id),u.lastLogin, DATE(u.lastLogin) AS groupDate FROM UserBundle:User u GROUP BY groupDate ORDER BY u.lastLogin DESC";
$query = $em->createQuery($dql);
$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate(
$query,
$this->get('request')->query->get('page', 1)/*page number*/,
12/*limit per page*/
);
DateFunction:
<?php
namespace TB\UserBundle\DQLFunctions;
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
use Doctrine\ORM\Query\Lexer;
use Doctrine\ORM\Query\SqlWalker;
use Doctrine\ORM\Query\Parser;
class DateFunction extends FunctionNode
{
private $arg;
public function getSql(SqlWalker $sqlWalker)
{
return sprintf('DATE(%s)', $this->arg->dispatch($sqlWalker));
}
public function parse(Parser $parser)
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->arg = $parser->ArithmeticPrimary();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
}
根据这些页面......
Use a DATE() function in a WHERE clause with DQL
Doctrine: Group by date ranges
http://www.doctrine-project.org/jira/browse/DDC-1236
当我在$ paginator
之前var_dump查询结果时 var_dump($query->getResult());die;
我得到了我的输出(所以DQL很好吗?)
array
0 =>
array
1 => string '1' (length=1)
'lastLogin' =>
object(DateTime)[968]
public 'date' => string '2014-01-11 16:31:46' (length=19)
public 'timezone_type' => int 3
public 'timezone' => string 'Europe/Berlin' (length=13)
'groupDate' => string '2014-01-11' (length=10)
1 =>
array
1 => string '1' (length=1)
'lastLogin' =>
object(DateTime)[988]
public 'date' => string '2013-10-15 21:05:31' (length=19)
public 'timezone_type' => int 3
public 'timezone' => string 'Europe/Berlin' (length=13)
'groupDate' => string '2013-10-15' (length=10)
2 =>
但是当我将查询传递给paginator时,我得到了:
Notice: Undefined index: groupDate in /vendor/doctrine/orm/lib/Doctrine/ORM/Query/SqlWalker.php line 2197
使用:
"knplabs/knp-paginator-bundle": "2.3.3",
"knplabs/knp-components": "1.2.4"
我错过了什么?
答案 0 :(得分:1)
试试这个。 以下是一些解决方案和类似问题 http://www.programmingrelief.com/4151523/Symfony2-Doctrine-Group-By Symfony2 doctrine GROUP BY
SELECT COUNT(u.id),
u.lastLogin,
DATE(u.lastLogin) AS groupDate
CAST(u.lastLogin as date) AS HIDDEN groupDateGrp
FROM UserBundle:User u
GROUP BY DATE(groupDateGrp)
ORDER BY u.lastLogin DESC
答案 1 :(得分:0)
我的问题已经解决了。我的查询结果与KNP不兼容我猜我做了什么?
$pagination = $paginator->paginate(
$query,
已更改为
$result = $query->getResult();
$pagination = $paginator->paginate(
$result,