是否可以将DQL查询生成器转换为查询生成器?

问题描述:

我有一个树形结构,它由Gedmo\Tree管理。我想对子树中的一个字段进行复杂的更新,此更新需要与另一个表进行连接,但不受DQL支持。所以我想通过Gedmo\Tree存储库方法childrenQueryBuilder获得DQL构建器,将其转换为QueryBuilder并添加更新语句。是否可以将DQL查询生成器转换为查询生成器?

$dqlQueryBuilder = $repository->childrenQueryBuilder($node, ...); 
$dqlQueryBuilder->resetDQLParts(['select', 'orderBy']); 
$queryBuilder = convert($dqlQueryBuilder); 
$queryBuilder->leftJoin('...', 'lj'); 
$queryBuilder->update('node.update', 'concat(node.field, lj.field)'); 

我知道我可以编写自定义QueryBuilder,我只是想知道,如果这种转换是可以通过内建的学说工具或某些3第三方库。

+0

工作,你能发布DQL?或者可能是它的简化版本? –

+0

是的,我更新了OP –

在Doctrine中没有SQLQueryBuilder这样的东西,只有QueryBuilder这是一个DQL查询生成器。你可以做的是通过做

$stringSql = $queryBuilder->getQuery() 
    ->getSQL(); 

DQL转换为SQL一旦你拥有了它,你可能会与本​​地SQL玩,然后执行它作为一个原始的SQL。

注:我不知道你的意思确切DB具体说法,但有地图DB具体功能通过使用FunctionNode类来DQL的可能性。将功能映射到DQL后,您可以仅使用DQL完成此功能。

检查documentation有关如何使用自定义的数据库功能DQL

+0

我没有提出正确的SQL查询构建器。 SQL查询生成器='\ Doctrine \ DBAL \ Query \ QueryBuilder' https://github.com/doctrine/dbal/blob/master/lib/Doctrine/DBAL/Query/QueryBuilder.php –