Symfony2带有日期的实体,计算每天的平均值


Symfony2 Entity with date, calculate average per day

我有一个实体金额

带有

/**
 * @var float
 *
 * @ORM'Column(name="value", type="float")
 */
private $value;
/**
 * @Exclude
 * @Gedmo'Timestampable(on="create")
 * @ORM'Column(name="created_at", type="datetime")
 */
private $createdAt;

以及更多领域

我想计算每天的平均值

现在我每天创建一个DateTime

    $date=new 'DateTime();
    $yesterday = new ' DateTime();
    $yesterday->modify("- 1 day");
    $beforeYesterday = new ' DateTime();
    $beforeYesterday->modify("- 2 days");    
    ...

并且我循环遍历所有金额

    $averageCounts=[];
    foreach ($amounts as $amount) {
        if($amount->getCreatedAt()->format("d.m.Y") == $date->format("d.m.Y") ){
            $averageCounts['today'] += $amount->getValue();                
        }
        if($amount->getCreatedAt()->format("d.m.Y") == $yesterday->format("d.m.Y") ){ 
           $averageCounts['yesterday'] += $amount->getValue(); 
        }
    }
    $averagePerDay = ($averageCounts['today'] + $averageCounts['yesterday']) / count($averageCount) ;

我不能再这样下去了,有人能给我一个计算每天平均值的优雅方法吗?

我建议您使用group by,这样您就有了下一个sql:

SELECT AVG(t.value), t.create_at FROM table AS t GROUP BY(t.create_at)

在您的存储库中,您可以用dql:进行翻译

$q = $em->createQuery();
$dql = "select AVG(t.value), DAY(t.createdAt)
        cdate  from MyProject'Model'Table t WHERE t.type=:param GROUP BY cdate";
$q->setDql($dql)->setParameter('param', $param);