когда я пытаюсь написать запрос dql, возникает ошибка задержки и завершения (beberlei / DoctrineExtensions)

Я пытаюсь преобразовать запрос MySQL8 в Doctrine DQL в Symfony4. Я использовал расширения https://github.com/beberlei/DoctrineExtensions. Но ошибки все равно есть.

Запрос работает хорошо.

SELECT id, machine_amount, LAG(machine_amount) OVER ( PARTITION BY machine_id ORDER BY id ) AS prevField FROM machine_income 

repositoryClass

$q = $this->createQueryBuilder('mi');

$q->select('mi.id, mi.machineAmount');
$q->addSelect('LAG(mi.machineAmount) OVER (PARTITION BY mi.machine ORDER BY mi.id) AS prevField');

return $q->getQuery()->getSQL(); 

doctrine.yaml

doctrine:
    orm:
        dql:
            string_functions:
                lag: DoctrineExtensions\Query\Mysql\Lag
                over: DoctrineExtensions\Query\Mysql\Over

DQL out

SELECT mi.id, mi.machineAmount, LAG(mi.machineAmount) OVER (PARTITION BY mi.machine ORDER BY mi.id) AS prevField FROM App\Entity\MachineIncome mi

Когда я пытаюсь создать getSQL (), я увидел ошибку.

ошибка

[Syntax Error] line 0, col 59: Error: Expected Doctrine\ORM\Query\Lexer::T_FROM, got '('

любая помощь?


person Mehmet Soylu    schedule 18.12.2019    source источник


Ответы (1)


Судя по реализации, это extension поддерживает только следующий синтаксис:

OVER( arithmeticExpression [, order by clause])

Итак, нет PARTITION BY.
Вероятно, вам понадобится что-то вроде этого:
https://github.com/elshafey/doctrine-window-functions

Или выберите ответы на этот другой вопрос:
Могу ли я использовать оконные функции в доктрине 2?

person vctls    schedule 23.11.2020