2017-03-27 3 views
1

Ich versuche, eine innere Abfrage und Parameter ohne Erfolg auszuführen, erhalte ich immer:Lehre innere Abfrage eingestellten Parameter

Ungültige Parameternummer: Anzahl der gebundenen Variablen stimmt nicht überein Anzahl von Token

diese

ist meine Frage:

SELECT i2 
FROM MyBundle:Identity i2 
INNER JOIN MyBundle:Property\\Mapped\\Email propertyEmail WITH propertyEmail.identity = i2 
INNER JOIN MyBundle:Channel channel WITH propertyEmail.channel = channel 
WHERE ( 
    SELECT COUNT(mappedEmail) 
    FROM MyBundle:Property\\Mapped\\Email mappedEmail 
    WHERE mappedEmail.identity = i2 
    AND mappedEmail.channel = :channel 
    AND mappedEmail.createdAt <= :dateFrom 
) > 0 
AND IDENTITY(propertyEmail.channel) <> :channel 
AND propertyEmail.createdAt <= :dateFrom 
GROUP BY i2 

Und das ist, wie ich als Unterabfrage setzen:

$innerQuery = $queryBuilder->getEntityManager()->createQuery($query) 
    ->setParameters([ 
     'channel' => $channelId,        
     'dateFrom' => $dateFrom 
    ]) 
; 
$queryBuilder->andWhere($queryBuilder->expr()->notIn($alias, $innerQuery->getDQL())); 

, die den Fehler zurück:

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

Wenn ich die Abfrage als einzelne Abfrage alle richtig funktioniert auszuführen.
Danke für den Vorschlag.

+0

versuchen, die Parameter auf dem letzten Zugabe von Querybuilder NICHT auf dem inneren – Matteo

Antwort

0

Versuchen Sie, die Parameter an der Haupt-Abfrage wie folgt anzuwenden:

$innerQuery = $queryBuilder->getEntityManager()->createQuery($query); 

$queryBuilder 
->andWhere($queryBuilder->expr()->notIn($alias, $innerQuery->getDQL())) 
    ->setParameters([ 
     'channel' => $channelId,        
     'dateFrom' => $dateFrom 
    ]);