【问题标题】:Using Query Builder in Symfony 2在 Symfony 2 中使用查询生成器
【发布时间】:2012-06-01 19:50:38
【问题描述】:

我正在尝试使用 Symfony2 中的查询生成器从数据库中获取一些记录。我在 SQL 中运行正常查询,它返回正确的结果。查询是

SELECT pg.name, pg.description
FROM pm_patentgroups pg
LEFT JOIN pm_portfolios pp ON pp.id = pg.portfolio_id

我想在 Symfony2 中使用 Doctorine 查询生成器使用精确查询。到目前为止我尝试过的是

 $repository = $this->getDoctrine()
        ->getRepository('MunichInnovationGroupBundle:PmPatentgroups');
        $query = $repository->createQueryBuilder('pg')
        ->from('pm_patentgroups', 'pg')
        ->leftJoin('pg','pm_portfolios','pp','pp.id = pg.portfolio_id')
        ->getQuery();
        $portfolio_groups = $query->getResult();

但它给了我以下错误:

警告:Doctrine\ORM\EntityRepository::createQueryBuilder() 缺少参数 1

我是 Symfony2 和 Doctorine 的新手。你能告诉我这里出了什么问题吗?

谢谢

【问题讨论】:

    标签: php symfony doctrine-orm


    【解决方案1】:

    您在使用 createQueryBuilder 时缺少别名。由于您拥有存储库,因此您可以删除 from 部分并使用

    $query = $repository->createQueryBuilder('pg')
    

    【讨论】:

    • 它给了我语法错误,但没有显示发生错误的任何特定行
    【解决方案2】:

    类似:

    $qb = $this->getDoctrine()->createQueryBuilder();
    
    $qb->addSelect('pm_patentgroups');
    $qb->addSelect('pm_portfolios');
    
    $qb->from('MunichInnovationGroupBundle:PmPatentgroups','pm_patentgroups');
    $qb->leftJoin('pm_patentgroups.pm_portfolios','pm_portfolios');
    

    这假设您的两个实体正确相关。

    D2 手册中有很多示例。请记住,查询生成器适用于对象,而不是 sql。

    顺便说一句,您的错误消息来自实体存储库(与实体管理器相反)需要别名这一事实。

    【讨论】:

    • 我必须为要加入的特定列包含 where 子句?
    • 不。一旦您在实体中设置了关系,查询构建器就足够聪明,可以计算出连接详细信息。 qb 的优点之一。如果您仍然无法让上述查询正常工作,请发布实体的相关部分。
    • 它现在给我一个未定义方法的错误...调用未定义方法 Symfony\Bundle\DoctrineBundle\Registry::createQueryBuilder()
    • 应该是 $this->getDoctrine->getEntityManager()->createQueryBuilder();
    • 我可以将我从查询中得到的整个结果保存到一个数组中吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多