2016-10-28 6 views
0

サブクエリとquerybuilderが、問合せの戻りeroor 私のコードで使用する `` `IFNULL``コマンドが怒鳴るDQLで利用IFNULLとsymfonyのクエリ私のプロジェクト で

$subQb = $em->createQueryBuilder(); 
      $subquery = $subQb->select('COUNT(v.id)') 
       ->from('AdminBundle:Visitsite', 'v') 
       ->where('v.site = s.id') 
       ->Andwhere('v.createdate > :date') 
       ->getDQL(); 

      $subQb2 = $em->createQueryBuilder(); 
      $subquery2 = $subQb2->select('l.quantity') 
       ->from('AdminBundle:Limitviewday', 'l') 
       ->where($subQb2->expr()->eq('s.limitviewday', 'l.id')) 
       ->getDQL(); 


      $subQb3 = $em->createQueryBuilder(); 
      $subquery3 = $subQb3->select('COUNT(i.id)') 
       ->from('AdminBundle:Visitsite', 'i') 
       ->where('i.id = s.id') 
       ->Andwhere('i.createdate > :date2') 
       ->Andwhere('i.ip = :ip') 
       ->groupBy('i.ip') 
       ->getDQL(); 

      $subQb4 = $em->createQueryBuilder(); 
      $subquery4 = $subQb4->select('ipl.quantity') 
       ->from('AdminBundle:Iplimitview', 'ipl') 
       ->where('s.iplimitview = ipl.id') 
       ->getDQL(); 


      $qb = $em->createQueryBuilder(); 
      $query = $qb->select('s') 
       ->from('AdminBundle:Sites', 's') 
       ->where('s.quantity > :one') 
       ->Andwhere('s.status = :two') 
       ->Andwhere($qb->expr()->lt("($subquery)", "($subquery2)")) 
       ->Andwhere($qb->expr()->lt("(SELECT IFNULL( ($subquery3),0))", "($subquery4))")) 
       ->setParameter('one', 1) 
       ->setParameter('two', 1) 
       ->setParameter('date', $date->format('Y-m-d')) 
       ->setParameter('ip', $ip) 
       ->setParameter('date2', $date->format('Y-m-d 00:00:00')); 

で、私の結果は

です

[Syntax Error] line 0, col 274: Error: Expected known function, got 'IFNULL'

答えて

0

Doctrineにはマップされた関数のセットが限られており、デフォルトではIFNULLがないようです。

簡単な方法は、DQLを変更し、IFNULLをIFまたはCOALESCEに置き換えることです。

さらに難しい方法はmanualとなり、独自のIFNULLマッピングを実装しますlike this

関連する問題