php - Doctrine: No alias was set before invoking getRootAlias() 错误

标签 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: Matched route "templatemanager_documentgenerator_api_client_find" (parameters: "_controller": "TemplateManager\Bundle\DocumentGeneratorBundle\Controller\API\ClientController::findAction", "id": "2", "_route": "templatemanager_documentgenerator_api_client_find") [] [] 
> [2016-09-27 12:06:34] security.DEBUG: Read SecurityContext from the session [] [] 
> [2016-09-27 12:06:34] security.DEBUG: Reloading user from user provider. [] [] 
> [2016-09-27 12:06:34] security.DEBUG: Username "admin" was reloaded from user provider. [] [] 
> [2016-09-27 12:06:34] request.CRITICAL: Uncaught PHP Exception RuntimeException: "No alias was set before invoking getRootAlias()." at //myproject//vendor/doctrine/orm/lib/Doctrine/ORM/QueryBuilder.php line 423 {"exception":"[object] (RuntimeException(code: 0): No alias was set before invoking getRootAlias(). at //myproject//vendor/doctrine/orm/lib/Doctrine/ORM/QueryBuilder.php:423)"} [] 
> [2016-09-27 12:06:34] security.DEBUG: Write SecurityContext in the session [] []

最佳答案

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

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

顺便准备一下你的查询以避免sql注入(inject)

$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 :)

关于php - Doctrine: No alias was set before invoking getRootAlias() 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39722001/

相关文章:

php - 推进数据加载 - "default"上下文不存在

Symfony2 带有名称和图像的实体类型表单

php - 两个不同子类扩展同一个实体实例时的 Doctrine 继承策略

php - 使用 php 快速列出 Amazon S3 存储桶中的所有文件的方法?

php - 我如何将 url 存储在数据库 Laravel 中

css - 如何根据将您带到该站点的 url 在 Symfony2 中获取特定于客户的配色方案

css - 使用 {{form_label()}} 在表单前面的文本列

php - Doctrine2 多级继承

php - 教义数组 vs simple_array vs json_array

php - 从 MySql_Fetch_Array 添加值到下拉菜单框