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。我要试试这个!