2017-05-17 79 views
1

私はsymfony/Doctrine2 QueryBuilderで構築したいSQLクエリを持っています。Doctrineサブクエリを使用したQueryBuilder複雑な非テーブルクエリ

以上の説明で明らかなように
select  
(SELECT group_concat(DISTINCT sender)  
    FROM transactions) as senders, 
(SELECT group_concat(DISTINCT receiver) 
    FROM transactions) as receivers, 
(SELECT group_concat(DISTINCT message_type) 
    FROM transactions) as types 

、メイン・クエリがテーブルを持っていない

は、それが示されているように、SQLコマンドを記述することなくQuerybuilderでこれを実装する方法はありますか?よると

答えて

0

あなたは、通常のクエリを構築するのと同じ方法、あなただけの正しいメソッド名を提供し、QueryBuilderオブジェクトを構築します。ここでQueryBuilderオブジェクトを構築する方法の例です:

//$em instanceof EntityManager 
// example1: creating a QueryBuilder instance 
$qb = $em->createQueryBuilder();` 

http://doctrine-orm.readthedocs.io/en/latest/reference/query-builder.html#constructing-a-new-querybuilder-object

は、しかし、これは実体に対してマッピングするために、あなたのルートクエリが必要になります。またquerybuilderは、サブクエリのための任意の実際のサポートを提供していませんが、とにかくどのように達成するためにいくつかの例があります:https://www.philipphoffmann.de/2012/08/29/a-bulletproof-pattern-for-creating-doctrine-subqueries-of-any-complexity/

:から借り

// build root query 
$query = Doctrine_Query::create() 
    ->from('Movie m') 
    ->where('name = ?', 'Prometheus') 
; 

// build subquery 
$subquery = $query->createSubquery() 
    ->from('SeenMovie sm') 
    ->where('m.name = sm.name') 
; 

// nest subquery and execute 
$query->where('EXISTS (' . $subquery->getDql() . ')')->execute(); 

関連する問題