2016-04-24 45 views
2

我有一個實體類:主義的DQL不生成查詢正確

/** 
* @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 
} 

這是完全依賴於數據庫。事實上,這個控制器可以按預期:

/** 
* @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; 
} 

但是,如果我嘗試DQL的方式來查詢,像這樣:

/** 
* @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; 
} 

我得到的是一個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... 

通過var_dumping $query->getResult()命令,我得到的是以下查詢,這看起來不好引用:

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

注意我正在使用模式名稱作爲我的實體。我無法弄清楚我的DQL有什麼問題。任何幫助?我使用的Symfony 2.8 LTS

+0

只是一個想法:不應該表中標註的名稱是沒有模式?因此,而不是'name =「」「app_auth」「。」「User」「」'使用'name =「User」'? – Miro

+0

不幸的是,這是對於Doctrine其他問題的解決方法。這樣模式名稱和區分大小寫的表名被正確管理 – Bertuz

+0

@Miro你讓我的一天!通過從模式名稱中刪除引號並僅爲表名稱進行維護,就可以正確生成查詢。你是否願意回答,以便我接受它? – Bertuz

回答

0

報價僅表名和離開模式名稱不帶引號的:

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

不是,它是'* @ORM \ Table(name =「app_auth。」「User」「」,schema =「app_auth」)';) – Bertuz

+0

哦,我明白了...您的表名稱爲「User」(帶引號) ?這是...不常見。 – Miro

+0

正確!我的表名是'User',它保留在'app_auth'模式中。問題是大寫'U',因爲postgres區分大小寫。要告訴Doctrine表名是區分大小寫的,你可以做的是引用它。不幸的是,引用模式不起作用,但我不需要它,所以我刪除了模式部分的引號 – Bertuz