Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 是否可以将DQL查询生成器转换为查询生成器?_Symfony_Doctrine Orm_Doctrine - Fatal编程技术网

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

Symfony 是否可以将DQL查询生成器转换为查询生成器?,symfony,doctrine-orm,doctrine,Symfony,Doctrine Orm,Doctrine,我有一个树结构,它由Gedmo\tree管理。我想对子树中的一个字段进行复杂更新,此更新需要与另一个表连接,DQL不支持此更新。因此,我想通过Gedmo\Tree存储库方法childrenQueryBuilder获取DQL生成器,将其转换为QueryBuilder并添加update语句 $dqlQueryBuilder = $repository->childrenQueryBuilder($node, ...); $dqlQueryBuilder->resetDQLParts(['

我有一个树结构,它由
Gedmo\tree
管理。我想对子树中的一个字段进行复杂更新,此更新需要与另一个表连接,DQL不支持此更新。因此,我想通过
Gedmo\Tree
存储库方法
childrenQueryBuilder
获取DQL生成器,将其转换为
QueryBuilder
并添加update语句

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

我知道我可以编写定制的
QueryBuilder
,我只是想知道这样的转换是否可以通过条令内置工具或一些第三方库实现。

条令中没有SQLQueryBuilder,只有
QueryBuilder
这是一个DQL查询生成器。您可以通过执行以下操作将
DQL
转换为
SQL

$stringSql = $queryBuilder->getQuery()
    ->getSQL();
一旦有了它,您就可以使用本机sql,然后将其作为原始sql执行

注意:我不确定您确切的DB-Specific语句是什么意思,但是可以通过使用
FunctionNode
class将DB-Specific函数映射到DQL。一旦将函数映射到DQL,就可以只使用DQL来完成它


检查如何在DQL中使用自定义DB函数

是否可以发布DQL?或者可能是它的简化版本?是的,我更新了OPI,但对SQL查询生成器的描述不正确。SQL查询生成器=
\doctor\DBAL\query\QueryBuilder