2016-04-24 11 views
2

Ich habe eine Einheit Klasse:Lehre der DQL generiert die Abfrage nicht korrekt

/** 
* @ORM\Entity 
* @ORM\Table(name="""app_auth"".""User""", schema="app_auth") 
*/ 
class User { 
    /** 
    * @ORM\Column(type="string") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="NONE") 
    */ 
    private $username; 

    /** 
    * @ORM\Column(type="string", nullable=true) 
    */ 
    private $email; 

    /** 
    * @ORM\Column(type="string", nullable=true) 
    */ 
    private $password; 

    // removed setters and getters 
} 

, die perfekt an die DB verbunden ist. Tatsächlich funktioniert diese Steuerung wie erwartet:

/** 
* @Route("users/{username}", 
*  defaults={ 
*  "_format" = "json" 
*  }) 
* @Method("GET") 
*/ 
public function getUserAction($username) 
{ 
    $user = $this->getDoctrine() 
     ->getRepository('BelkaTestBundle:User') 
     ->find($username); 

    if(!$user) 
     throw $this->createNotFoundException("User $username not found"); 

    $res = new JsonResponse(); 
    $res->setData(array(
     'user' => $user->getUsername(), 
     'email' => $user->getEmail())); 

    return $res; 
} 

Aber wenn ich versuche, mittels DQL, wie diese Abfrage:

/** 
* @Route("users/{username}", 
*  defaults={ 
*  "_format" = "json", 
*  }) 
* @Method("GET") 
*/ 
public function getUserAction($username) 
{ 
    $repository = $this->getDoctrine() 
      ->getRepository('BelkaTestBundle:User'); 
    $query = $repository->createQueryBuilder('u'); 
    $users = $query->getResult(); 

    /*something here to manage and return the results*/ 
    return $res; 
} 

Was ich erhalte, ist ein Fehler Symfony:

An exception occurred while executing 'SELECT "0_.username AS username0, "0_.email AS email1, "0_.password AS password2 FROM "app_auth"."User" "0_': 

SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "0" 
LINE 1: SELECT "0_.username AS username0, "0_.email AS email1, "0_.p... 

Durch var_dumping der $query->getResult() Befehl, was ich habe, ist die folgende Abfrage, die schlecht zitiert aussieht:

SELECT "0_.username AS username0, "0_.email AS email1, "0_.password AS password2 FROM "app_auth"."User" "0_ 

Hinweis: Ich verwende den Schemaname für meine Entität. Ich kann nicht herausfinden, was mit meinem DQL nicht stimmt. Irgendeine Hilfe? Ich bin mit Symfony 2.8 LTS

+0

Nur eine Idee: sollte nicht der Name der Tabelle in Anmerkung ohne Schema sein? Also anstelle von 'name =" "" app_auth "". "" User "" "' 'name =" User "'? – Miro

+0

Leider ist das eine Problemumgehung für andere Probleme, die Doctrine hat. Auf diese Weise werden der Schemaname und der Name der Groß-/Kleinschreibung korrekt verwaltet. – Bertuz

+0

@Miro Du hast meinen Tag gemacht! Indem Sie die Anführungszeichen aus dem Schemanamen entfernen und sie nur für den Tabellennamen beibehalten, wird die Abfrage korrekt generiert. Möchtest du es beantworten, damit ich es akzeptiere? – Bertuz

Antwort

0

Quote nur die Tabellennamen und lassen Sie die Schemanamen nicht notiert:

* @ORM\Table(name="app_auth.""User""", schema="app_auth") 
+0

Nein, es ist '* @ORM \ Tabelle (name =" app_auth. "" Benutzer "" ", schema =" app_auth ")';) – Bertuz

+0

oh ich sehe ... Ihre Tabelle hat den Namen "Benutzer" (mit Anführungszeichen) ? das ist ... nicht so üblich. – Miro

+0

korrekt! Mein Tabellenname ist "Benutzer", der im Schema "app_auth" verbleibt. Das Problem ist das Großbuchstabe "U", da Postgres die Groß- und Kleinschreibung unterscheidet. Um Doctrine mitzuteilen, dass der Tabellenname Groß- und Kleinschreibung unterscheidet, können Sie ihn zitieren. Leider funktioniert das Zitieren des Schemas nicht, aber ich brauche es nicht, also habe ich die Anführungszeichen nach dem Schemateil entfernt – Bertuz