1 回答
TA贡献1856条经验 获得超5个赞
这里的主要问题是你的变量是可变对象(通过引用传递)。
此外,在测试后会检查模拟断言,并且某些变量已更改。
修复:在使用任何日期之前克隆它(“分离”与原始变量)。
public function fillStatisticForAllTime(): void
{
$firstDate = \DateTime::createFromFormat('Y-m-d H:i:s', $this->userPaymentsRepository->getTheOldestDate());
$lastDate = (new \DateTime())->setTime(0, 0, 0);
while ($firstDate < $lastDate) {
$this->fillStatistic(clone $firstDate); // <--------------- clone date
$firstDate->add(new \DateInterval('P1D'));
}
}
private function fillStatistic(\DateTime $day): void
{
$dateFrom = clone $day; // <----------------------------------- clone date
$dateFrom->setTime(0, 0, 0);
$dateTo = clone $day;
$dateTo->setTime(23, 59, 59);
$statisticAll = $this->userPaymentsRepository
->getSummaryStatistic(['dateFrom' => $dateFrom, 'dateTo' => $dateTo, 'onlyPaid' => false]);
$this->userPaymentsStatisticRepository->insertDailyStatistic($statisticAll, $day, false);
$statisticOnlyPaid = $this->userPaymentsRepository
->getSummaryStatistic(['dateFrom' => $dateFrom, 'dateTo' => $dateTo, 'onlyPaid' => true]);
$this->userPaymentsStatisticRepository->insertDailyStatistic($statisticOnlyPaid, $day, true);
}
顺便说一句,你的第二种方法之所以有效,是因为你创建了一个新对象(从原始变量“detact”)
为了避免将来出现类似的错误,您可能需要使用不可变的日期对象。
- 1 回答
- 0 关注
- 166 浏览
添加回答
举报
