我有一个 Doctrine2 项目,有三个表:产品,类别和评级。每个产品都有一个且只有一个类别。类别可能有父母和许多孩子。 每个产品都有很多评级。
我运行以下查询:
SELECT DISTINCT p, AVG(r.value)*COUNT(r) as globalrating
FROM AcmeProductBundle:Product p
JOIN p.ratings r JOIN p.category cat JOIN cat.parent par
WHERE par = '.$categoryID.' OR cat = '.$categoryID.'
ORDER BY globalrating DESC, p.name ASC
其中$ categoryID是我正在搜索产品的类别的ID。 关键是,尽管该类别中没有产品,但报告了一个结果。特别是,对象的类型为Acme \ ProductBundle \ Product,并且字段中没有值, id为0 ! “全球化”值也是空的!我不明白为什么?
有什么想法吗?
提前致谢。
答案 0 :(得分:0)
请你试试这个:
$query = $this->em->createQuery('SELECT DISTINCT p, AVG(r.value)*COUNT(r) as globalrating
FROM AcmeProductBundle:Product p
JOIN p.ratings r JOIN p.category cat JOIN cat.parent par
WHERE par = :category OR cat = :category
ORDER BY globalrating DESC, p.name ASC');
$query->setParameter('category', $categoryID);
$returned = $query->getResult();
答案 1 :(得分:0)
我今天回到这个问题,终于找到了问题!
阅读相关的Doctrine docs,我发现遗漏的GROUP BY
条款。因此,正确的 DQL查询是:
SELECT DISTINCT p, AVG(r.value)*COUNT(r) as globalrating
FROM AcmeProductBundle:Product p
JOIN p.ratings r JOIN p.category cat JOIN cat.parent par
WHERE par = '.$categoryID.' OR cat = '.$categoryID.'
GROUP BY p.id
ORDER BY globalrating DESC, p.name ASC