2012-06-24 2 views
1

У меня есть Doctrine2 проект с тремя таблицами: Продукт, Категория и Рейтинг. Каждый продукт имеет одну и только одну категорию. Категория может иметь родителя и много детей. Каждый продукт имеет много рейтинга.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 является идентификатор категории, в которой я поисках продуктов. Дело в том, что, несмотря на то, что в этой категории товаров нет, сообщается один результат. В частности, объект имеет тип Acme \ ProductBundle \ Product и не имеет значений в полях, а идентификатор - 0! Также «глобальное» значение пусто! Я не понимаю, почему?

Есть идеи?

Заранее благодарен.

ответ

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 
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(); 
+0

Пробовал! Это то же самое... – JeanValjean

Смежные вопросы