2016-07-28 10 views
0

zuerst, Entschuldigung für schlechtes Englisch!SQL zu QueryBuilder

Ich versuche, diese SQL zu konvertieren (es ist betriebsbereit):

SELECT DISTINCT U.id 
FROM User U 
INNER JOIN Detail DE on U.id = DE.id_user 
INNER JOIN matiere MA on U.id = MA.id_user 
WHERE DE.ville = $var1 
AND MA.matiere = $var2 

in Query Builder. Ich habe versuchen Sie dies:

$query = $repository->createQuerybuilder('U.id') 
    ->from('User', 'U') 
    ->innerJoin('Detail', 'DE', 'WITH', ' U.id = DE.id_user') 
    ->innerJoin('matiere', 'MA', 'WITH', 'U.id = MA.id_user') 
    ->where('DE.ville = :ville') 
    ->setParameter('ville', $ville) 
    ->andWhere('MA.matiere = :matiere') 
    ->setParameter('matiere', $matiere) 
    ->distinct(); 

aber ich habe diesen Fehler: „[Syntax Error] Zeile 0, Spalte 49: Fehler: '' Erwartetes Ende der Schnur, bekam "

Und wenn ich versuche, diesen:

$query = $repository->createQueryBuilder() 
    ->select('U.id') 
    ->from('User', 'U') 
    ->innerJoin('Detail', 'DE', 'WITH', ' U.id = DE.id_user') 
    ->innerJoin('matiere', 'MA', 'WITH', 'U.id = MA.id_user') 
    ->where('DE.ville = :ville') 
    ->setParameter('ville', $ville) 
    ->andWhere('MA.matiere = :matiere') 
    ->setParameter('matiere', $matiere) 
    ->distinct(); 

Ich habe diesen Fehler:

Warning: Missing argument 1 for Doctrine\ORM\EntityRepository::createQueryBuilder(), 

ich mit Lehre und symfony3 arbeiten.

Vielen Dank für Hilfe.

Antwort

0

Dies ist wie ein Syntaxfehler, sowohl die Funktion der Entwicklung im Abfrage-Generator als die eigene Instanz der Abfrage, versuchen, ein Debug zu machen und sehen, wie die SQL-Abfrage erstellt wird, Syntaxfehler möglicherweise.

$qb = $repository->createQueryBuilder(); 
$query = $qb->getQuery(); 
$debug = $query->debug(); 

hat einen Raum zwischen den Saiten [ ‚U.id = DE.id_user‘)], entfernen Sie diese Räume, um zu versuchen, die möglichen Fehler zu umgeben;

oder Sie können versuchen, diese Art und Weise machen, wahrscheinlich funktionieren:

$query = $repository->createQueryBuilder(); <!--separte constructor this line--> 

    $query->select('U.id') 
    ->from('User', 'U') 
    ->innerJoin('Detail', 'DE', 'WITH', 'U.id = DE.id_user') <!--align this line--> 
    ->innerJoin('matiere', 'MA', 'WITH', 'U.id = MA.id_user') 
    ->where('DE.ville', ':ville') <!--separate this line--> 
    ->setParameter('ville', $ville) 
    ->andWhere('MA.matiere', ':matiere') <!--separate this line--> 
    ->setParameter('matiere', $matiere) 
    ->distinct() 
    ->getQuery(); <!--add this line--> 

    $resp = $query->getResult(); <!--get the answer this line--> 
+0

Ich habe versuchen, Ihre Lösung ist der Fehler gleich sind (Achtung: Fehlende Argument 1 für Lehre \ ORM \ EntityRepository :: createQueryBuilder()) Ich versuche haben zu löschen 'wählen (U.id') und put 'createQuerybuilder (' U..id ');' und der gleiche Fehler ('[Syntax Error] Zeile 0, Spalte 49: Fehler: Erwartete Ende der Zeichenfolge, habe'. '') Ich verstehe nicht, wo das Problem ist ... – jomalix

+0

Sie haben debuggen? Es ist wichtig zu wissen, wie ist die SQL-Abfrage in Ihrer Variablen, es scheint, dass ein Syntaxfehler beim Ausführen der SQL-Abfrage, der Fehler [Erwartete Ende der Zeichenfolge, bekam.Es scheint, dass der lexikalische Analysator Es wartet auf ein Zeichen, um den Zeichenkettensatz zu schließen und ihn richtig auszuführen, oder hat einen Zeichenpunkt [. ] außerhalb der Reihenfolge in der SQL-Zeichenkette, störend läuft richtig und erzeugt den Fehler –

0

In dieser Zeile:

$query = $repository->createQuerybuilder('U.id') 

Sie versuchen, ein Objekt und Methodenaufruf zu übergeben, anstatt nur einen einzigen Parameter. Deshalb der Fehler über den Punkt.

verwenden stattdessen vor dem Querybuilder die ID zu erhalten:

$id = U.id 

oder

$id = $U->getId(); 

dann in Parameter übergeben:

$query = $repository->createQuerybuilder($id) 
... 

Dann werden Sie nicht den Fehler : "[Syntaxfehler] Zeile 0, Spalte 49: Fehler: erwartetes Ende der Zeichenfolge, bekam '.' "