在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();