带日期的 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);
我有一个实体金额
和
/**
* @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);