Symfony / Doctrine - GroupBy没有返回所有结果

时间:2018-05-05 12:44:48

标签: symfony doctrine

我遇到GroupBy问题。

我有实体,包含产品的类别和实体。我希望按类别(id)分组所有产品。

public function getAll()
{
    $qb = $this->createQueryBuilder('p');
    $qb->leftJoin('p.categories', 'category');
    $qb->where('p.enabled = true');
    $qb->andWhere('p.visible = true');
    $qb->andWhere('p.quantity >= 1');
    $qb->groupBy('category.id');

    return $qb->getQuery()->getResult();
}

但是这只返回了几条记录(我认为每个类别都有1条记录)。

如何将所有产品分类?

由于

1 个答案:

答案 0 :(得分:1)

所以,如果你有这样的事情:

类别(ID,名称)1-N产品(id,name,enabled,visible,quantity,category_id)和:

categories:
id  name
1   category1
2   category2

products:
id  name    enabled  visible  quantity  category_id
1   prod1   1        1        1         1
2   prod2   1        1        2         1
3   prod3   1        1        3         1
4   prod4   1        1        1         2
5   prod5   1        1        2         2

然后我认为你应该从CategoryRepository开始,然后:

public function getAll()
{
    $qb = $this->createQueryBuilder('c');
    $qb
        ->select('c.name')
        ->addSelect("(SELECT GROUP_CONCAT(p.name) FROM AppBundle:Product p WHERE p.category = c.id AND p.enabled = :enabled AND p.visible = :visible AND p.quantity >= :number) AS prods")
        ->setParameter('enabled', true)
        ->setParameter('visible', true)
        ->setParameter('number', 1)
    ;
    return $qb->getQuery()->getResult();
}

结果如下:

array:2 [▼
    0 => array:2 [▼
        "name" => "category1"
        "prods" => "prod1,prod2,prod3"
    ]
    1 => array:2 [▼
        "name" => "category2"
        "prods" => "prod4,prod5"
    ]
]

此外,您需要安装beberlei's DoctrineExtensions让教义了解GROUP_CONCAT功能