Php 原则2.2 DQL日期分组依据
我正在尝试执行此查询:Php 原则2.2 DQL日期分组依据,php,date,symfony,doctrine-orm,Php,Date,Symfony,Doctrine Orm,我正在尝试执行此查询: public function historyLoginAction() { $em = $this->get('doctrine.orm.entity_manager'); $em->getConfiguration()->addCustomDatetimeFunction('DATE', 'TB\UserBundle\DQLFunctions\DateFunction'); $dql = "SELECT COUNT
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*/
);
日期函数:
<?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);
}
}
我得到了我的输出(所以DQL是好的,对吗?)
但当我将查询传递给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"
请问我遗漏了什么?试试这个。
这里有一些解决方案和类似的问题
我的问题解决了。我的查询结果与KNP不兼容,我想是的,我做了什么
$pagination = $paginator->paginate(
$query,
改为
$result = $query->getResult();
$pagination = $paginator->paginate(
$result,
你能检查一下你的查询是否返回了一些数据吗?另一个问题是UserBundle:User我想应该是User,我已经更新了答案。不,应该是UserBundle:User我在每个DQL查询中都这样写当我按照您的建议尝试仅使用用户时,我遇到了错误。好的,只需回显查询,并查看它在不隐藏和使用UserBundle的情况下给出了什么,比如回显$dql;对象(条令\ORM\Query)[918]私有“\u state'=>int 2 private”\u dql'=>string”选择计数(u.id)、u.lastLogin、日期(u.lastLogin)作为UserBundle中的groupDate:User u GROUP BY groupDate ORDER BY u.lastLogin DESC'(长度=130)
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
$pagination = $paginator->paginate(
$query,
$result = $query->getResult();
$pagination = $paginator->paginate(
$result,