I am trying to execute this query:
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);
}
}
According to these pages...
Use a DATE() function in a WHERE clause with DQL
Doctrine: Group by date ranges
http://www.doctrine-project.org/jira/browse/DDC-1236
When i var_dump the query result before $paginator
var_dump($query->getResult());die;
I get my output (so the DQL is good right?)
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 =>
But when i pass the query to paginator i am getting:
Notice: Undefined index: groupDate in /vendor/doctrine/orm/lib/Doctrine/ORM/Query/SqlWalker.php line 2197
Using:
"knplabs/knp-paginator-bundle": "2.3.3",
"knplabs/knp-components": "1.2.4"
What am i missing please?