AST自定义学步车

问题描述 投票:0回答:2

我在Symfony 2中使用Doctrine。我有许多共享相同部分的DQL查询。我发现,可以使用Doctrine的定制AST修改AST来解决此问题。以下是我要完成的示例:

转换

SELECT a
FROM AcmeBundle:SomeEntity a
WHERE a.someColumn = 5

to

SELECT a
FROM AcmeBundle:SomeEntity a
LEFT JOIN a.someOtherEntity b
WHERE a.someColumn = 5 AND (b.someOtherColumn = 2 OR b.someTotallyOtherColumn = 3)

AST Walker应该添加一个左连接-或多个左连接并在WHERE部分中添加条件。

我正在阅读文档(http://docs.doctrine-project.org/en/2.0.x/cookbook/dql-custom-walkers.html),但是只有一个示例。示例中使用的代码对我来说已经很复杂,而且我找不到其他任何文档,所以这就是我在这里询问的原因。

谢谢!

php symfony doctrine abstract-syntax-tree dql
2个回答
1
投票

考虑使用查询生成器:

$qb = $entityManager->createQueryBuilder();
$qb->addSelect('a');
$qb->from('AcmeBundle:SomeEntity','a');
$qb->andWhere(... someColumn = 5 ...);

您可以直接执行上述查询,也可以使用以下方法添加更多内容:

$qb->leftJoin('a.someOtherEntity','b');
$qb->andWhere(... additional conditions ...);

0
投票

最近,JetBrains发布了DQL plugin。如果您使用的是PhpStorm,建议您尽可能使用DQL而不是QueryBuilder。它提供many features,例如语法检查和自动完成,并且支持重构名称。

© www.soinside.com 2019 - 2024. All rights reserved.