2017-03-23 9 views
1

Symfony Doctrineのネイティブクエリーにwhere句を追加する方法。例えば、私の最初のクエリのように:Doctrineネイティブクエリービルダーにwhere句を追加します。

 $query = $em->createQuery("select distinct s.id 
    from service s join tags_services t on t.service_id=s.id join tag on t.tag_id = tag.id 
    where 
     (s.title like '%play%' 
     or tag.name like '%play%' 
     or s.description like '%play%') 
    order by 
     s.title like '%play%' desc, 
     tag.name like '%play%' desc, 
     s.description like '%play%' desc"); 
    $services = $query->getResult(); 

が、場合、私は、カテゴリが与えられた場合

'AND s.category = :category' 

の追加など、より多くのパラメータを指定して、この結果をフィルタリングします。またはソートパラメータを追加します。基本的には、このクエリ文字列をどのように動的に変更できるかを理解しようとしています。

答えて

1

これは何か?

$filter = ''; 

if (category instanceOf Category) { 
    filter = ' AND s.category = :category' 
} 

$sql = ' 
    select distinct s.id 
    from service s 
    join tags_services t on t.service_id=s.id join tag on t.tag_id = tag.id 
    where 
     (s.title like :play 
     or tag.name like :play 
     or s.description like :play) 
     '. $filter .' 
    order by 
     s.title desc, 
     tag.name desc, 
     s.description desc' 

またquerybuilderでそれを行うことができます。 tag.name「%LIKE '%プレイ%' DESCのようなs.title、によって `順:

$qb = $this->createQueryBuilder('s') 
    ->addSelect('distinct s.id') 
    ->join('s.tags_services', 'ts') 
    ->join('ts.tag', 't'); 

$qb->where($qb->expr()->orX(
    $qb->expr()->like('s.title', ':play'), 
    $qb->expr()->like('t.name', ':play'), 
    $qb->expr()->like('s.description', ':play'), 
)); 

if (category instanceOf Category) { 
    $qb->addWhere(...) 
} 
+0

は、ここで重要な部分は、この部分です'%play%' desc 'のようなs.descriptionをQueryBuilderでどのように使うことができますか? – blahblah

関連する問題