如何解决API请求加载时间很长,问题出在哪里?
我们在Laravel中遇到某些数据库查询的问题。有谁知道如何优化此代码以加快页面加载速度?我们有一个非常庞大的数据库,现在加载页面大约需要半分钟。
public function index($year,int $weekStart,int $weekEnd)
{
$employees = Employee::has('houses')
->with(['collections' => function ($collections) use ($year,$weekEnd) {
$collections->where('year','=',$year)
->where('week','<=',$weekEnd)
->orWhere('year','<',$year);
}])
->get(['id','identifier','firstname','insertion','lastname']);
foreach ($employees as $employee) {
$weeks = [];
for ($week = $weekStart; $week <= $weekEnd; $week++) {
$weeks[$week] = ['rent' => 0,'addition' => 0,'balance' => 0,'week_balance' => 0];
$employeeCollectionsInWeek = $employee->collections
->where('year',$week);
$employeeRentInWeek = $employeeCollectionsInWeek
->where('type','rent');
$employeeAdditionInWeek = $employeeCollectionsInWeek
->where('type','addition');
$employeeCollectionsUpToWeek = $employee->collections
->filter(function ($collection) use ($year,$week) {
return ($collection->year == $year && $collection->week <= $week) || $collection->year < $year;
});
if ($employeeRentInWeek->count()) {
$weeks[$week]['rent'] = round($employeeRentInWeek->sum('amount'),2);
}
if ($employeeAdditionInWeek->count()) {
$weeks[$week]['addition'] = round($employeeAdditionInWeek->sum('amount'),2);
}
if ($employeeCollectionsUpToWeek->count()) {
$totalToBePaid = $employeeCollectionsUpToWeek->whereIn('type',['rent','addition'])->sum('amount');
$totalPaid = $employeeCollectionsUpToWeek->whereIn('type',['payment_cash','payment_card','payment_transfer','payment_tikkie','remission'])->sum('amount');
$weeks[$week]['balance'] = round($totalPaid - $totalToBePaid,2);
}
if ($employeeCollectionsInWeek->count()) {
$totalToBePaidInWeek = $employeeCollectionsInWeek->whereIn('type','addition'])->sum('amount');
$totalPaidInWeek = $employeeCollectionsInWeek->whereIn('type','remission'])->sum('amount');
$weeks[$week]['week_balance'] = round($totalPaidInWeek - $totalToBePaidInWeek,2);
}
}
$employee['weeks'] = $weeks;
}
return $employees;
}
亲切的问候,
汤姆·范德豪特(Tom van der Hout),迪伦·沃勒布雷格(Dylan Vollebregt),代顿·德朗格(Daton de Lange)和达恩·詹森(Daan Jansen)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。