1

在我的 Symfony 应用程序中,我有一个实体“项目”,它包含两个字段:“createdOn”(类型 = 日期)和“个人”。一个人可以在“项目”中多次出现。

_created_On_|_individual_id
 2012.12.01 |     3
 2012.12.24 |     5
 2013.01.10 |     9

我正在尝试构建一个查询来计算按“createdOn”分组的所有不同个体,这样我就可以得到按月排序的结果。并且必须可以为查询设置日期范围。

到目前为止我的查询:

'SELECT p.createdOn, COUNT (DISTINCT p.individual) 
                FROM ...\DossierBundle\Entity\Project p
                WHERE p.createdOn
                BETWEEN :name1
                AND :name2' 
                )->setParameters(array(
                'name1' => $startDate,
                'name2' => $endDate,
                ))

这并不能完全让我得到下面想要的结果

_DATE____|_Number_of_Individuals
Dec 2012 | 2
Jan 2013 | 1

但相反我得到

__DATE_____|_Number_of_Individuals
2012.12.01 |     1
2012.12.24 |     1
2013.01.10 |     1 

谷歌也没有帮助我,所以任何支持都将不胜感激。

弗洛

4

1 回答 1

0

您需要使用自定义日期函数来扩展教义,并且要小心,因为您不能将 group by 与函数一起使用,因此您必须欺骗教义。

看看那个:

http://www.doctrine-project.org/blog/doctrine2-custom-dql-udfs.html

这是一天本地 mysql 函数的示例:

https://github.com/beberlei/DoctrineExtensions/blob/master/lib/DoctrineExtensions/Query/Mysql/Day.php

并按问题阅读该组并解决(使用 as ):

http://www.doctrine-project.org/jira/browse/DDC-1236

我需要按日期(没有时间)对访问进行分组,所以我编写了带有日期扩展名的 dql 查询:

select count(v) as visit_count , DATE(v.created_at) as day_created_at from Shorten\Entity\Visit v group by day_created_at 

希望能帮助到你。

于 2013-02-26T07:25:17.757 回答