2017-10-06 10 views
0

私はツリー構造を持っており、Gedmo\Treeによって管理されています。私はサブツリー内の1つのフィールドに対して複雑な更新を行いたいが、この更新は別のテーブルとの結合が必要であり、DQLではサポートされていない。だから、Gedmo\TreeリポジトリメソッドchildrenQueryBuilderでDQLビルダーを入手し、それをQueryBuilderに変換し、更新ステートメントを追加したいと思います。私はカスタム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)'); 

、このような変換が教義の組み込みツールまたは一部3 - サードパーティライブラリによって可能にしている場合、私は疑問に思います。

+0

DQLでカスタムDB機能と連携する方法について

チェックdocumentationあなたはDQLを投稿することができますか?それとも、単純化したバージョンですか? –

+0

はい、私はOP –

答えて

0

DoctrineにSQLQueryBuilderというものはありません.DQLクエリビルダはQueryBuilderしかありません。あなたにできることは、あなたがそれを持っていたら、あなたはネイティブSQLでプレイして、生のSQLとして実行可能性

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

を行うことによってSQLDQLを変換することです。

注:私はあなたが意味正確に何DB固有の声明わからないんだけど、FunctionNodeクラスを利用することによってDQLするDB具体的な機能をマッピングする可能性があります。関数をDQLにマップすると、DQLのみでその機能を実現できます。

+0

を更新しました。私はSQLクエリービルダーについて正しいとは思っていませんでした。 SQLクエリービルダー= '\ Doctrine \ DBAL \ Query \ QueryBuilder' https://github.com/doctrine/dbal/blob/master/lib/Doctrine/DBAL/Query/QueryBuilder.php –

関連する問題