当我尝试编写 dql 查询时,出现滞后和过度错误(beberlei/DoctrineExtensions)
Posted
技术标签:
【中文标题】当我尝试编写 dql 查询时,出现滞后和过度错误(beberlei/DoctrineExtensions)【英文标题】:when I try to write a dql query there is an error for lag & over ( 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 '('
有什么帮助吗?
【问题讨论】:
【参考方案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?
【讨论】:
以上是关于当我尝试编写 dql 查询时,出现滞后和过度错误(beberlei/DoctrineExtensions)的主要内容,如果未能解决你的问题,请参考以下文章
当我尝试运行使用 CodeIgniter 编写的项目时出现 Xampp 未知错误