【问题标题】:Doctrine's DQL does not generate the query correctlyDoctrine 的 DQL 无法正确生成查询
【发布时间】: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


【解决方案1】:

只引用表名,不引用架构名:

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

【讨论】:

  • 不,是* @ORM\Table(name="app_auth.""User""", schema="app_auth") ;)
  • 哦,我明白了...您的表有名称“用户”(带引号)?这……不常见。
  • 正确!我的表名是User,它保留在app_auth 模式中。问题是大写的U,因为postgres 区分大小写。要告诉 Doctrine 表名区分大小写,您可以做的是引用它。不幸的是,引用架构不起作用,但我不需要它,所以我删除了架构部分的引号
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 2020-03-21
  • 1970-01-01
  • 2017-03-02
  • 2021-08-05
相关资源
最近更新 更多