Doctrine2查询返回不存在的对象

时间:2012-06-24 19:34:15

标签: doctrine-orm

我有一个 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 ! “全球化”值也是空的!我不明白为什么?

有什么想法吗?

提前致谢。

2 个答案:

答案 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