Symfony2实体与日期,计算每日平均值

时间:2015-02-12 12:19:59

标签: php symfony doctrine-orm

我有一个实体金额

/**
 * @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) ;

所以它不可思议地继续这样下去,有人能指出我计算每天平均价值的优雅方式吗?

1 个答案:

答案 0 :(得分:1)

我建议你使用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);