2017-10-06 159 views
0

我有一個樹形結構,它由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 –

回答

0

在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 –

相關問題