在 Symfony 2 中使用查询生成器


Using Query Builder in Symfony 2

我正在尝试使用Symfony2中的Query Builder从数据库中获取一些记录。我在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的新手。你能告诉我这里出了什么问题吗?

谢谢

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

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

像这样:

$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。

顺便说一下,您的错误消息来自实体存储库(而不是实体管理器)需要别名的事实。