DQL-функция доктрины Symfony: Примечание: неопределенный индекс для псевдонима столбца - PullRequest
0 голосов
/ 23 сентября 2018

Я пытаюсь вызвать функцию, созданную функцией, в Entity Repository

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) * * @return string * / открытая функция walkEntityIdentificationVariable ($ identVariable) {$ class = $ this-> queryComponents [$ identVariable] ['metadata'];$ tableAlias ​​= $ this-> getSQLTableAlias ​​($ class-> getTableName (), $ identVariable);$ sqlParts = array ();foreach ($ this-> quoteStrategy-> getIdentifierColumnNames ($ class, $ this-> platform) как $ columnName) {$ sqlParts [] = $ tableAlias.'',$ columnName;

1 Ответ

0 голосов
/ 03 октября 2018

Проблема в том, что вы не можете использовать функцию DATE из пакета berberlei, так как эта функция ожидает столбец и вы передаете псевдоним bill_date, который является строкой.Вы можете создать свою собственную функцию DATE, чтобы ожидать строковую переменную.

...