是否可以将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第三方库。
在Doctrine中没有SQLQueryBuilder这样的东西,只有QueryBuilder
这是一个DQL查询生成器。你可以做的是通过做
$stringSql = $queryBuilder->getQuery()
->getSQL();
到DQL
转换为SQL
一旦你拥有了它,你可能会与本地SQL玩,然后执行它作为一个原始的SQL。
注:我不知道你的意思确切DB具体说法,但有地图DB具体功能通过使用FunctionNode
类来DQL的可能性。将功能映射到DQL后,您可以仅使用DQL完成此功能。
检查documentation有关如何使用自定义的数据库功能DQL
我没有提出正确的SQL查询构建器。 SQL查询生成器='\ Doctrine \ DBAL \ Query \ QueryBuilder' https://github.com/doctrine/dbal/blob/master/lib/Doctrine/DBAL/Query/QueryBuilder.php –
工作,你能发布DQL?或者可能是它的简化版本? –
是的,我更新了OP –