问题描述
我们在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 (将#修改为@)