我有一个树结构,它由Gedmo\Tree
管理。我想对子树中的一个字段进行复杂更新,此更新需要与另一个表连接,DQL不支持它。所以我希望通过Gedmo\Tree
存储库方法childrenQueryBuilder
获取DQL构建器,将其转换为QueryBuilder
并添加更新语句。
$dqlQueryBuilder = $repository->childrenQueryBuilder($node, ...);
$dqlQueryBuilder->resetDQLParts(['select', 'orderBy']);
$queryBuilder = convert($dqlQueryBuilder);
$queryBuilder->leftJoin('...', 'lj');
$queryBuilder->update('node.update', 'concat(node.field, lj.field)');
我知道我可以编写自定义QueryBuilder
,我只是想知道这些转换是否可以通过doctrine内置工具或一些第三方库来实现。
答案 0 :(得分:0)
在Doctrine中没有SQLQueryBuilder这样的东西,只有QueryBuilder
这是一个DQL查询生成器。您可以做的是通过执行
DQL
转换为SQL
$stringSql = $queryBuilder->getQuery()
->getSQL();
一旦拥有它,您可以使用本机sql,然后将其作为原始sql执行。
注意:我不确定您的意思是什么确切的数据库特定声明,但是可以通过使用FunctionNode
将数据库特定功能映射到DQL类。将函数映射到DQL之后,您可以仅使用DQL完成它。
检查documentation如何在DQL中使用自定义数据库功能