我想选择未提供给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进行此操作?
答案 0 :(得分:0)
不幸的是,Doctrine无法做到这一点(请参阅Benjamin Eberlei对此问题的GitHub声明)。
解决方案 / 解决方法是在从Xxx
到Aaa
的方向上定义整个关联链,然后找到{{1在Xxx
FROM
开始的“路径”后面的实体:
Xxx