2016-10-29 3 views
0

подзапрос и QueryBuilder в моем проекте, но результат ошибкаошибка В подзапросом в Symfony

мой DQL код

$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.site = 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("(COALESCE( ($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')); 


      $settlements = $query->getQuery()->getResult(); 

и мой результат DQL является

SELECT s FROM AdminBundle:Sites s WHERE s.quantity > :one AND s.status = :two AND ((SELECT COUNT(v.id) FROM AdminBundle:Visitsite v WHERE v.site = s.id AND v.createdate > :date) < (SELECT l.quantity FROM AdminBundle:Limitviewday l WHERE s.limitviewday = l.id)) AND ((COALESCE((SELECT COUNT(i.id) FROM AdminBundle:Visitsite i WHERE i.site = s.id AND i.createdate > :date2 AND i.ip = :ip GROUP BY i.ip),0)) < (SELECT ipl.quantity FROM AdminBundle:Iplimitview ipl WHERE s.iplimitview = ipl.id))) 

каждый ting в порядке, но мой результат - ошибка

[Syntax Error] line 0, col 279: Error: Expected Literal, got 'SELECT'

ответ

0

Ваш выходной код: SELECT s FROM AdminBundle:Sites, но это неправильно.

коррекция

SELECT *FROM AdminBundle:Sites 

s не поле, должно быть использование перед тем FROM именем столбца, как s.quantity, s.stauts подобное

Пожалуйста, измените код в этом, как: изменение $query = $qb->select('s') выбрать 's' ссылку выше инструкции

+0

моя проблема - '' '-> Andwhere ($ qb-> expr() -> lt (" (COALESCE (($ subquery3), 0)) "," ($ subquery4)) "))' '' select from сайтов в порядке –

+0

во-первых, вы можете исправить '$ query = $ qb-> select ('s')'. потому что 's' не является именем столбца, это большая ошибка. дайте мне знать –

+0

Это мой код, но не работает –

 Смежные вопросы

  • Нет связанных вопросов^_^