如何使用Doctrine的QueryQuilder通过另一个实体类型选择实体?

时间:2017-03-02 12:28:24

标签: select doctrine-orm query-builder querying

我想选择未提供给QueryBuilder#select(...)的实体。在原始SQL中,它看起来像这样:

SELECT x.*
FROM aaa a
INNER JOIN bbb b ON a.document_id = b.id
INNER JOIN ccc c ON b.client_user_id = c.id
INNER JOIN xxx x ON c.client_id = x.id
WHERE a.id = 123

现在我尝试使用QueryBuilder

实现此逻辑
$query = $queryBuilder->select('x')
    ->from(Aaa::class, 'a')
    ->join('a.bbb', 'b')
    ->join('b.ccc', 'c')
    ->join('c.xxx', 'x')
    ->where('a.id = :aId')
    ->setParameter('aId', $aId)
    ->getQuery()
;

但它不起作用:

  

[语义错误]第0行,第-1行靠近'SELECT x FROM':错误:如果不选择至少一个根实体别名,则无法通过标识变量选择实体。

如何使用Doctrine的QueryQuilder进行此操作?

1 个答案:

答案 0 :(得分:0)

不幸的是,Doctrine无法做到这一点(请参阅Benjamin Eberlei对此问题的GitHub声明)。

解决方案 / 解决方法是在从XxxAaa的方向上定义整个关联链,然后找到{{1在Xxx FROM开始的“路径”后面的实体:

Xxx