Symfony原则DQL函数给定通知:别名列名称上的未定义索引

时间:2018-09-23 16:02:46

标签: doctrine-orm dql symfony-3.4

我正在尝试在实体存储库中调用函数创建的函数

public function getBillGroupByDate($dateStart, $dateEnd) {
    return $query = $this->createQueryBuilder('d')
        ->select('count(d) as nb, SUBSTRING(d.created, 1, 10) as bill_date')
        ->having('DATE(bill_date) BETWEEN :from AND :to')
        ->groupBy('bill_date')
        ->orderBy('d.created', 'ASC')
        ->setParameter('from', $dateStart)
        ->setParameter('to', $dateEnd)
        ->getQuery()
        ->getResult();
}

我正在使用一个berberlei捆绑包,该捆绑包已创建了最需要的DQL函数以用于理论。功能日期似乎很好

<?php

namespace DoctrineExtensions\Query\Mysql;

use Doctrine\ORM\Query\AST\Functions\FunctionNode;
use Doctrine\ORM\Query\Lexer;

/**
 * @author Steve Lacey <steve@stevelacey.net>
 */
class Date extends FunctionNode
{
    public $date;

    public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
    {
        return 'DATE(' . $sqlWalker->walkArithmeticPrimary($this->date) . ')';
    }

    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);
    }
}

但是出于某种原因,我不知道我总是有一个例外,也许是因为列名是一个别名而实际上并不存在吗?

  

HTTP 500内部服务器错误   注意:未定义索引:元数据   例外   Symfony \ Component \ Debug \ Exception \   ContextErrorException   在vendor \ doctrine \ orm \ lib \ Doctrine \ ORM \ Query \ SqlWalker.php中(604行)        * * @返回字符串* /公共函数walkEntityIdentificationVariable($ identVariable){$ class = $ this-> queryComponents [$ identVariable] ['metadata']; $ tableAlias = $ this-> getSQLTableAlias($ class-> getTableName(),$ identVariable); $ sqlParts = array(); foreach($ this-> quoteStrategy-> getIdentifierColumnNames($ class,$ this-> platform)as $ columnName){$ sqlParts [] = $ tableAlias。 '。' 。 $ columnName;

1 个答案:

答案 0 :(得分:0)

问题是您不能使用berberlei捆绑包中的DATE函数,因为该函数需要一个列,并且您传递的别名'bill_date'是一个字符串。您可以创建自己的函数DATE期望使用String变量。