如何通过symfony中的doctrine查询构建器选择额外的字段并将它们映射到实体?

时间:2017-06-13 18:47:04

标签: symfony orm doctrine query-builder

我有两个实体:类别和产品。类别实体尚未链接到产品(protected $products // ArrayColection)。我需要计算每个类别中的产品价格总量,我只需要通过查询构建器在SINGLE请求中进行。

我可以这样做:

$categories = $categoryRepository->createQueryBuilder('c')->join('AppBundle:Product', 'p')->addSelect('SUM(p.price) as c.totalPrice')->addGroupBy('c.id')->getQuery()->getResults();

然后将属性totalPrice映射到实体,以便以某种方式访问​​它:

$categories->get(0)->totalAmount

我可以构建额外的查询,并且我可以通过添加每个产品的价格,将关系字段添加到类别($产品)以在实体方法中计算totalSum。我应该只用单个查询来完成...

1 个答案:

答案 0 :(得分:0)

您正在谈论的是Doctrine> 2.4

查看他们的文档以获取有关联接的更多详细信息:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html

同时 - 这应该适合你:

$query = $this->createQueryBuilder('c')
            ->leftJoin('AppBundle:Product', 'p', 'WITH', 'p.category = c.id')
            ->select('SUM(p.price) as totalPrice')
            ->groupBy('c.id');

注意我们如何使用leftJoin方法参数 - 这是允许您运行查询的原因,尽管表之间没有关系。

希望对你有用