0

我将 Doctrine 与 Symfony 2 一起使用。我有很多共享公共部分的 DQL 查询。我发现,可以使用修改 AST 的 Doctrine 自定义步行器来解决这个问题。以下是我想要完成的示例:

转换

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

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),但只有一个示例。示例中使用的代码对我来说已经看起来很复杂,而且我无法找到任何其他文档,所以这就是我在这里询问的原因。

谢谢!

4

1 回答 1

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 ...);
于 2012-12-11T16:42:35.287 回答