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);
}
順便說一句,你的第二種方法之所以有效,是因為你創(chuàng)建了一個新對象(從原始變量“detact”)
為了避免將來出現(xiàn)類似的錯誤,您可能需要使用不可變的日期對象。
- 1 回答
- 0 關注
- 129 瀏覽
添加回答
舉報
