教义:调用 getRootAlias() 错误之前未设置别名

问题描述 投票:0回答:2

我原来的查询是:

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”(参数: “_控制器”: “TemplateManager\Bundle\DocumentGeneratorBundle\Controller\API\ClientController::findAction”, “id”:“2”,“_route”: “templatemanager_documentgenerator_api_client_find”)[] [] > [2016-09-27 12:06:34] security.DEBUG:从 会议 [] [] > [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行{“异常”:“[对象](RuntimeException(代码:0):没有别名 在调用 getRootAlias() 之前设置。在 //myproject//vendor/doctrine/orm/lib/Doctrine/ORM/QueryBuilder.php:423)"} [] > [2016-09-27 12:06:34] security.DEBUG:在中写入SecurityContext 会话[][]

php symfony doctrine-orm doctrine
2个回答
0
投票

试试这个 在 $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,我们遇到了迁移问题:)


0
投票

->from()
需要第二个参数,因此您的代码如下所示:

$qb->select('u')
   ->from('TemplateManager\Bundle\DocumentGeneratorBundle\Entity\User', 'u')

更好的是,你可以像这样使用

User::class

use TemplateManager\Bundle\DocumentGeneratorBundle\Entity\User;

...

$qb->select('u')
   ->from(User::class, 'u')
© www.soinside.com 2019 - 2024. All rights reserved.