symfony 原则:叫用getRootAlias()错误之前未设定别名

yzuktlbb  于 2022-11-25  发布在  其他
关注(0)|答案(2)|浏览(107)

我的原始查询是:

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]请求。匹配路径“模板管理器_文档生成器_api_客户端_find”(参数:“控制器”(_C):“模板管理器\捆绑包\文档生成器捆绑包\控制器\API\客户端控制器::查找操作”,“id”:“2”,“_路由”:[] []
〉[2016-09-27 12:06:34]安全性.调试:[
2016-09-27 12:06:34]安全性从会话中读取安全上下文[] []〉调试:[] []
〉[2016-09-27 12:06:34]安全性。调试:用户名“admin”已从用户提供程序中重新加载。[] []
〉[2016-09-27 12:06:34]请求。关键:未捕获PHP异常运行时异常:“在调用getRootAlias()之前没有设置别名。”在//myproject//vendor/doctrine/orm/lib/Doctrine/ORM/QueryBuilder. php第423行{“异常”:“[对象](运行时异常(代码:0):调用getRootAlias()前没有设置别名。at //myproject//vendor/doctrine/orm/lib/Doctrine/ORM/QueryBuilder.php:423)"} []
〉[2016-09-27 12:06:34]安全性调试:在会话[] []中写入安全上下文

webghufk

webghufk1#

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

pu3pd22g

pu3pd22g2#

->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')

相关问题