我想使用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());
每次使用新结构时,我都会遇到语义错误,无法纠正...
非常感谢您的帮助
您可以尝试一些类似的事情(我的工作模型中的代码片段)
$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());