2016-10-28 3 views
0

подзапрос и QueryBuilder в моем проекте но при использовании `` `команда IFNULL`` в обратный запрос eroor мой код нижеиспользование IFNULL в DQL и 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