Doctrine2查询不填充实体对象

时间:2013-11-10 21:45:12

标签: mysql symfony doctrine-orm

我可能忽略了一些东西,但我不明白为什么我没有从Doctrine2 DQL获得任何结果。它不会失败,但会返回空对象。 Symfony2参数设置正确,我知道正在使用适当的SQL查询数据库(通过在MySQL上记录SQL查询)。

代码无效的控制器:

public function debugAction() {
    $em = $this->getDoctrine()->getEntityManager();
    $qb = $em->createQueryBuilder();
    $account = $qb->select('a')
                   ->from('SkiviBundle:Account', 'a')
                   ->where('a.id = :id')
                   ->setParameter('id', 5)
                   ->getQuery()->getResult();
    return new \Symfony\Component\HttpFoundation\JsonResponse(array(
        'dql' => $qb->getDql(),
        'sql' => $qb->getQuery()->getSQL(),
        'params' => $qb->getQuery()->getParameters(),
        'account' => $account
    ));
}

这是我得到的JSON响应,显示返回的对象为空。我甚至没有得到参数。

{
   "dql":"SELECT a FROM SkiviBundle:Account a WHERE a.id = :id",
   "sql":"SELECT a0_.id AS id0, a0_.business AS business1 FROM account a0_ WHERE a0_.id = ?",
   "params":{},
   "account":[{}]
}

我知道SQL是针对数据库成功执行的。如何让Doctrine2将返回对象($ accounts)填充为实体对象?我的Symfony2应用程序是标准的(除了添加实体和控制器以及更新数据库访问参数外,无需进一步配置即可生成。

1 个答案:

答案 0 :(得分:1)

似乎不能在dql中使用:id,id是关键字吗?重命名并重试

毕竟,这是一种执行此查询的方法:

$em->getRepository('SkiviBundle:Account')->find($id);