我正在尝试在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的新手。你能告诉我这里出了什么问题吗?
由于
答案 0 :(得分:4)
使用createQueryBuilder时缺少别名。由于您拥有存储库,因此可以删除部分并使用
$query = $repository->createQueryBuilder('pg')
答案 1 :(得分: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。
顺便说一句,您的错误消息来自实体存储库(而不是实体管理器)需要别名的事实。