2013-12-09 6 views
1

У меня есть два объекта, Class и Student. Один Class может иметь несколько Student s (oneToMany):Как получить количество строк связанных объектов?

# YAML notation for Entity 'Class' 
... 
oneToMany: 
    students: 
     targetEntity: MyBundle\Entity\Student 
     mappedBy: class 

Для получения всех Class эсов, я пишу свой собственный запрос, как это:

SELECT c 
FROM MyBundle:Class c 
WHERE c.whatever = :parameter 
ORDER BY c.id DESC 

Теперь я пытаюсь принести список от Class es, заказанный (DESC) по количеству связанных Student s. Чтобы результат выглядел так:

Class.id Class.count(Student) 
-------- -------------------- 
     3     109 
     1      81 
     4      58 
     2      21 

Как туда попасть? Я пытался что-то вроде этого несколько:

SELECT 
    c, 
    COUNT(c.students) AS students 
FROM MyBundle:Class c 
WHERE c.whatever = :param 
GROUP BY c.id 
ORDER BY students DESC 

(Примечание: я реализовать функцию DoctrineExtensions' Date)

Но я получаю сообщение об ошибке:

[Semantical Error] line 0, col 26 near 'students)': Error: Invalid PathExpression. StateFieldPathExpression or SingleValuedAssociationField expected.

+0

Попробуйте добавить 'GROUP BY c.id' в ваш запрос. –

+0

Я сделал, все тот же сообщение об ошибке. –

ответ

3

Попробуйте использовать это в вашем Class хранилище:

public function getAllClassesOrderedByNumberOfStudents() 
{ 
    $qb = $this->createQueryBuilder('class'); 

    $buffer = $qb 
     ->select('class, COUNT(students) AS students_per_class') 
     ->innerJoin('class.students', 'students') 
     ->groupBy('class.id') 
     ->orderBy('students_per_class', 'DESC'); 

    $q = $buffer->getQuery(); 

    return $q->getResult(); 
} 
+0

Извините, что принял это поздно, как-то исчез с моих глаз. Благодаря! –

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