我的原始查询是:
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 会话[] []
答案 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:)