使用Doctrine的QueryBuilder获得产品数量最少的类别

问题描述 投票:0回答:1

我想使用Doctrine的QueryBuilder来获取具有指定属性的类别,并且其中包含最少数量的产品。我精确地说,这是我第一次使用该学说的功能。我发现了这一点,并且意识到它比基本存储库功能强大得多。我是SQL的初学者,因为我曾经使用存储库的功能。

但是我想我是通过纯SQL实现的:

SELECT category.*,COUNT(*)
FROM category_product 
INNER JOIN category ON category_product.category_id = category.id 
WHERE category.name = 'region' 
GROUP BY category_product.category_id HAVING COUNT(*) > 20

目前,我完全不了解DQL构造。我的类别和产品实体都具有多对多关系,因此我无法将其推广到教义。我尝试使用由教义自动生成的category_product表,但它不想访问该表...

        $qb = $this->createQueryBuilder('c');

        $qb
            ->select('c')
            ->where("c.name = 'region'")
            ->innerJoin('c.products', 'p', 'WITH', 'COUNT(c.products) > :minimum')
            ->setParameter('minimum', $minimum);

        dump($qb->getQuery(), $qb->getQuery()->getResult());


每次使用新结构时,我都会遇到语义错误,无法纠正...

非常感谢您的帮助

symfony doctrine symfony4 query-builder
1个回答
0
投票

您可以尝试一些类似的事情(我的工作模型中的代码片段)

$qb = $this->createQueryBuilder('c')
        ->select('c')
        ->where('c.name = region')
        ->addSelect('COUNT(c.products) AS count')
        ->innerJoin('c.products', 'p')
        ->having('count > :minimum')
        ->setParameter('region', $region)
        ->setParameter('minimum', $minimum)
      ;

    dump($qb->getQuery()->getResult());
© www.soinside.com 2019 - 2024. All rights reserved.