пользовательская функция dql возвращает любые данные - PullRequest
0 голосов
/ 16 января 2019

Я создаю пользовательскую функцию dql в своем проекте, но когда я использую эту функцию в моем dql, у меня есть какой-либо объект: эта функция вычисляет разницу между часами (только часы, а не день, месяц или годы, только часы)

код функции dql:

<?php

namespace Symdrik\CentralBundle\DQL;

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

/**
 * DateAddFunction ::=
 *     "DIFF_HOUR" "(" ArithmeticPrimary ", -" ArithmeticPrimary Identifier ")"
 */
Class DifferenceWIthHour extends FunctionNode
{
  public $firstDate;
  public $secondDate;
  public function parse(Parser $parser)
  {
    $parser->match(Lexer::T_IDENTIFIER);
    $parser->match(Lexer::T_OPEN_PARENTHESIS);
    $this->firstDate = $parser->ArithmeticPrimary();
    $parser->match(Lexer::T_COMMA);
    $this->secondDate = $parser->ArithmeticPrimary();
    $parser->match(Lexer::T_CLOSE_PARENTHESIS);
  }

  public function getSql(SqlWalker $sqlWalker)
  {
    return  'round('.(strtotime($this->firstDate->dispatch($sqlWalker)) . '-' . strtotime($this->secondDate->dispatch($sqlWalker)))/3600 .',1)';
  }
}

Теперь в запросе я добавляю эту строку в свой запрос, но возвращаю пустое значение:

(:statusEcartEstimated = 'test' AND DIFF_HOUR(tRecord.test,applications.appliedAt) >= :criterion )

: критерий равен 1 ... когда я устанавливаю критерий на 0, возвращаются все объекты в базе данных, но когда я устанавливаю критерий 1 или 2 или 3 ... у меня есть какой-либо объект

...