Расширение пользовательской доктрины с использованием postgres "OVERLAPS" - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь реализовать функцию OVERLAPS из postgres в проекте 3.4 Symfony для сопоставления диапазонов дат.

Я сделал следующее расширение:

class DateOverlaps extends FunctionNode
{
    public $rangeStart;
    public $rangeEnd;
    public $targetStart;
    public $targetEnd;


    public function parse(Parser $parser)
    {
        $parser->match(Lexer::T_IDENTIFIER);
        $parser->match(Lexer::T_OPEN_PARENTHESIS);
        $this->rangeStart = $parser->InputParameter();
        $parser->match(Lexer::T_COMMA);
        $this->rangeEnd = $parser->InputParameter();
        $parser->match(Lexer::T_COMMA);
        $this->targetStart = $parser->SingleValuedPathExpression();
        $parser->match(Lexer::T_COMMA);
        $this->targetEnd = $parser->SingleValuedPathExpression();
        $parser->match(Lexer::T_CLOSE_PARENTHESIS);
    }

    /**
     * @param SqlWalker $sqlWalker
     *
     * @return string
     */
    public function getSql(SqlWalker $sqlWalker)
    {
        $rangeStart = $this->rangeStart->dispatch($sqlWalker);
        $rangeEnd = $this->rangeEnd->dispatch($sqlWalker);
        $targetStart = $this->targetStart->dispatch($sqlWalker);
        $targetEnd = $this->targetEnd->dispatch($sqlWalker);

        return "($rangeStart, $rangeEnd) OVERLAPS ($targetStart, $targetEnd)";
    }
}

Конфигурация:

orm:
    dql:
        string_functions:
            overlaps: AppBundle\Driver\DateOverlaps

И использовать его в таком простом хранилище, как это:

public function findRangedEvents(\DateTime $start, \DateTime $end)
{
    $qb = $this->createQueryBuilder('event')
        ->where("overlaps(:start, :end, event.occuringDate, event.occuringEndDate)")
        ->setParameter('start', $start)
        ->setParameter('end', $end);

    return $qb->getQuery()->getResult();
}

Но я получаю ошибки вроде

"[Syntax Error] line 0, col -1: Error: Expected =, <, <=, <>, >, >=, !=, got end of string."

Я перепробовал много различных функций синтаксического анализатора, но я действительно не могупонять, чего мне не хватает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...