Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 原则2.2 DQL日期分组依据_Php_Date_Symfony_Doctrine Orm - Fatal编程技术网

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,