我有一個實體類:主義的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
只是一個想法:不應該表中標註的名稱是沒有模式?因此,而不是'name =「」「app_auth」「。」「User」「」'使用'name =「User」'? – Miro
不幸的是,這是對於Doctrine其他問題的解決方法。這樣模式名稱和區分大小寫的表名被正確管理 – Bertuz
@Miro你讓我的一天!通過從模式名稱中刪除引號並僅爲表名稱進行維護,就可以正確生成查詢。你是否願意回答,以便我接受它? – Bertuz