【发布时间】:2016-04-24 15:46:01
【问题描述】:
我有一个实体类:
/**
* @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="User"代替name="""app_auth"".""User"""? -
不幸的是,这是解决 Doctrine 其他问题的解决方法。这样模式名和区分大小写的表名就被正确管理了
-
@Miro 你成就了我的一天!通过从架构名称中删除引号并仅为表名称维护它们,查询会正确生成。你想回答它以便我接受吗?
标签: postgresql symfony doctrine-orm doctrine dql