Doctrine:在调用getRootAlias()错误之前没有设置别名

时间:2016-09-27 10:13:57

标签: php symfony doctrine-orm doctrine

我的原始查询是:

Select * from user u
inner join company c
on u.company_id = c.id 
where u.id=2

我做到了:

$em = $this->get('doctrine')->getEntityManager();
        $qb = $em->createQueryBuilder();

        $qb->select('u')
            ->from('TemplateManager\Bundle\DocumentGeneratorBundle\Entity\User u')
            ->innerjoin('u.company')
            ->where('u.id = ' . $id);
        $query = $qb->getQuery();
        $result = $query->getResult();

我在日志中得到500以下详细信息:

  

[2016-09-27 12:06:34] request.INFO:匹配路线   “templatemanager_documentgenerator_api_client_find”(参数:   “_controller”:   “TemplateManager \包\ DocumentGeneratorBundle \控制器\ API \ ClientController :: findAction”   “id”:“2”,“_ lute”:   “templatemanager_documentgenerator_api_client_find”)[] []   > [2016-09-27 12:06:34] security.DEBUG:从中读取SecurityContext   会话[] []   > [2016-09-27 12:06:34] security.DEBUG:从用户重新加载用户   供应商。 [] []   > [2016-09-27 12:06:34] security.DEBUG:重新加载用户名“admin”   来自用户提供商。 [] []   > [2016-09-27 12:06:34] request.CRITICAL:未捕获PHP异常   RuntimeException:“在调用getRootAlias()之前没有设置别名。”   在//myproject//vendor/doctrine/orm/lib/Doctrine/ORM/QueryBuilder.php   第423行{“exception”:“[object](RuntimeException(code:0):无别名   在调用getRootAlias()之前设置。在   //myproject//vendor/doctrine/orm/lib/Doctrine/ORM/QueryBuilder.php:423)“}   []   > [2016-09-27 12:06:34] security.DEBUG:写入SecurityContext   会话[] []

1 个答案:

答案 0 :(得分:1)

试试这个 在$ em-> createQueryBuilder();

上添加别名
$em->createQueryBuilder('u');

顺便准备你的查询以避免sql注入

$qb->select('u')
  ->from('User', 'u')
  ->where('u.id = ?1')
  ->orderBy('u.name', 'ASC')
  ->setParameter(1, 100);

在我自己的项目中,我试过这个并且效果很好:

$em = $this->get('doctrine')->getEntityManager();

$qb = $em->createQueryBuilder('u');

$qb->select('u')
        ->from('INSIDE\Bundle\AdminBundle\Entity\TAdminUser', 'u')
        ->innerJoin('u.idUser' , 'myalias')
        ->where('u.idAdminUser = 2');

$query = $qb->getQuery();
$result = $query->getResult();

idUser是另一个表,而不是我们遇到迁移问题的id:)