2016-09-09 3 views
1

Ich versuche, SQL-Abfrage zu konvertieren in Lehre Query Builder (das funktioniert gut), aber es gelingt mir nicht, weil es eine Sub-Abfrageerstellen subquery Query Builder mit

enthält Dies ist meine SQL-Abfrage:

SELECT * 
FROM `navigation` 
WHERE `parent_id` = 
(
    SELECT `id` 
    FROM `navigation` 
    WHERE `parent_id` = 47 
    AND `nav_type`= 'nav' 
    AND `published` = 1 
    AND `title` = 'Top' 
) 

Und das ist, was ich in meinem Repository versucht:

class NavigationRepository extends EntityRepository 
{ 
    public function test($parentId, $type, $status, $title) 
    { 
     $subQuery = $this->createQueryBuilder('n2') 
      ->select('n2.id') 
      ->where('n2.parent = :parent') 
      ->andWhere('n2.type = :type') 
      ->andWhere('n2.status = :status') 
      ->andWhere('n2.title = :title') 
      ->setParameter('parent', $parentId) 
      ->setParameter('type', $type) 
      ->setParameter('status', $status) 
      ->setParameter('title', $title) 
      ->getDQL(); 

     $qb = $this->createQueryBuilder('n'); 
     $qb 
      ->where(
       $qb->expr()->eq('n.parent', '('.$subQuery.')') 
      ) 
      ->getQuery() 
      ->getResult(); 

     return $qb 
      ->getQuery() 
      ->getResult(); 
    } 
} 

Aber ich diesen Fehler hätte:

QueryException: Ungültige Parameternummer: Anzahl der gebundenen Variablen Anzahl von Token nicht Warum

Vorstellungen? Es scheint, ich habe die richtige Anzahl von Parametern noch ...

Antwort

2

Sie sollten setParameter() auf $qb statt $subQuery anrufen. Der DQL enthält keine interpolierten Parameter, sondern nur eine reguläre Zeichenfolge.

+0

Ich bekomme 'NULL' Ergebnis .... – DOZ

+0

Ich weiß nicht, was Ihre Abfrage oder wie Ihre Datenbank aussieht. Sie haben nach der falschen Anzahl von Parametern gefragt. – martin

+0

ja in der Tat danke, ich aktualisiere meine Antwort mit Ihrer Lösung und ich setze wie ich meine Abfrage aufrufen – DOZ