在Laravel 5.3中,我编写了一个收集程序,旨在循环查看用户的帐单并确定是否在给定的时间范围内付款。

return $dates->map(function ($item, $key) use ($interval) {
    $bills = DB::table('bills')
    ->where('provider_id', Auth::user()->company()->first()->id)
    ->whereBetween(
        'date_paid', [$item, $this->returnRangeFromInterval($item, $interval)]
    )
    ->where('status', 'paid')
    ->get();
    return $bills->pluck('amount_due')->sum();
});


date_paid属性存储为UTC,但是要返回准确的总和,我需要将该日期转换为用户的时区,该时区已存储在User对象中。我如何在上面的收藏夹中完成此任务?

如果绝对必要,我似乎可以使用称为convert_tz的MYSQL方法,但我首先对“ Laravel方式”感兴趣。

最佳答案

收藏到营救。我能够使用map修改有问题的属性,然后返回具有该已修改属性的账单集合。也减少了我正在查询的数量。

$bills = DB::table('bills')
    ->where('provider_id', Auth::user()->company()->first()->id)
    ->where('status', 'paid')
    ->get();

$adjustedBills = $bills->map(function ($bill, $key) {
    $bill->date_paid = Carbon::parse($bill->date_paid)->timezone('America/New_York')->toDateTimeString();
    return $bill;
});

return $dates->map(function ($item, $key) use ($interval, $adjustedBills) {
    return $adjustedBills->filter(function ($date, $key) use ($item, $interval) {
        return $date->date_paid >= $item && $date->date_paid <= $this->returnRangeFromInterval($item, $interval);
    })->pluck('amount_due')->sum();
})->flatten();

10-08 09:09
查看更多