Symfony 如何按关联实体的数量和时间跨度对我的条令结果进行排序

Symfony 如何按关联实体的数量和时间跨度对我的条令结果进行排序,symfony,doctrine-orm,count,one-to-many,Symfony,Doctrine Orm,Count,One To Many,我有两个实体,Class和Student。一个类可以有多个学生s,因此它是一个单一关系。(不用麻烦了,这应该是一种多人关系,我只是举个例子。) 为了获取所有Classes,我编写了自己的查询,如下所示: SELECT c FROM MyBundle:Class c WHERE c.whatever = :parameter ORDER BY c.id DESC SELECT c, COUNT(c.students) AS students, MAX(s.date) FR

我有两个实体,
Class
Student
。一个
可以有多个
学生
s,因此它是一个单一关系。(不用麻烦了,这应该是一种多人关系,我只是举个例子。)

为了获取所有
Class
es,我编写了自己的查询,如下所示:

SELECT c
FROM MyBundle:Class c
WHERE c.whatever = :parameter
ORDER BY c.id DESC
SELECT
    c,
    COUNT(c.students) AS students,
    MAX(s.date)
FROM MyBundle:Class c
WHERE c.whatever = :param
AND DATE(s.date) > :fivedayspan
ORDER BY students DESC
现在我正试图获取一个“上升”类的列表。这意味着,在过去五天内由
Student
s加入的所有
Class
es-按加入的
Student
s的数量排序(DESC)

因此,结果如下所示:

Class.id   Class.count(Student)   Latest Join
--------   --------------------   -----------
       3                     19    2013-12-07
       1                     12    2013-12-08
       4                      8    2013-12-07
       2                      5    2013-12-09
我怎么去那里?我试过这样的方法:

SELECT c
FROM MyBundle:Class c
WHERE c.whatever = :parameter
ORDER BY c.id DESC
SELECT
    c,
    COUNT(c.students) AS students,
    MAX(s.date)
FROM MyBundle:Class c
WHERE c.whatever = :param
AND DATE(s.date) > :fivedayspan
ORDER BY students DESC
(注:我执行功能)

我正在设置参数:

$q->setParameter('fivedayspan', date('Y-m-d', strtotime('-5 days')));
但我有一个错误:

[语义错误]第0行,第36列靠近“学生”):错误:无效的PathExpression。应为StateFieldPathExpression或SingleValuedAssociationField

这样行吗

SELECT
    c,
    COUNT(c.students) AS c.N,
    MAX(c.date)
FROM MyBundle:Class c
WHERE c.whatever = :param
AND DATE(c.date) > :fivedayspan
ORDER BY c.N DESC

您在这里寻找DQL或QueryBuilder解决方案吗?顺便说一句,DQL中没有
DATE
函数。。。参见:)而不是DQL而不是qb,但我对两者都很满意。而且:我可以通过使用DoctrineExtensions来使用date(我已经成功地使用了它)。这不起作用。。。DQL中没有日期函数。抱歉:)没关系,我正在使用DoctrineExtensions。我要试试这个!