Select 如何使用Doctrine的QueryQuider通过另一种实体类型选择实体?

Select 如何使用Doctrine的QueryQuider通过另一种实体类型选择实体?,select,doctrine-orm,query-builder,querying,Select,Doctrine Orm,Query Builder,Querying,我想选择未提供给QueryBuilderselect的实体。。。。在原始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实现这个逻辑: 但它不起作用: [Se

我想选择未提供给QueryBuilderselect的实体。。。。在原始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实现这个逻辑:

但它不起作用:

[Semantic Error]第0行,列-1“从中选择x”:错误:如果不选择至少一个根实体别名,则无法通过标识变量选择实体


如何使用Doctrine的QueryQuilder实现这一点?

不幸的是,Doctrine无法实现这一点,请参见本期的声明

解决方案/解决方法是在从Xxx到Aaa的方向上定义整个关联链,然后按照从Xxx开始的路径找到Xxx实体:

$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()
;
$query = $queryBuilder->select('x')
    ->from(Xxx::class, 'x')
    ->join('x.ccc', 'c')
    ->join('c.bbb', 'b')
    ->join('b.aaa', 'a')
    ->where('a.id = :aId')
    ->setParameter('aId', $aId)
    ->getQuery()
;