【问题标题】:when I try to write a dql query there is an error for lag & over ( beberlei/DoctrineExtensions )当我尝试编写 dql 查询时,出现滞后和过度错误(beberlei/DoctrineExtensions)
【发布时间】:2019-12-18 19:16:27
【问题描述】:

我正在尝试将 MySQL8 查询转换为 Symfony4 中的 Doctrine DQL。我曾经使用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 输出

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 '('

有什么帮助吗?

【问题讨论】:

    标签: doctrine symfony4 dql mysql-8.0 doctrine-extensions


    【解决方案1】:

    the implementation来看,这个扩展只支持以下语法:

    OVER( arithmeticExpression [, order by clause])
    

    所以,没有PARTITION BY
    你可能需要这样的东西:
    https://github.com/elshafey/doctrine-window-functions

    或从其他问题的答案中挑选:
    Can I use window functions in doctrine 2?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      相关资源
      最近更新 更多