如何在Blade的for循环中更新当前值 解决贷款余额无法更新问题
问题原因
现有代码每次计算均使用初始贷款总额$loan->amount,未在循环中维护更新剩余贷款余额变量,也没有基于当期剩余本金计算利息,因此所有期数的余额数值完全相同。
具体修改方案
1. 调整Blade模板逻辑
在循环外初始化剩余贷款余额变量,循环过程中逐期更新余额:
{{-- 初始化基础计算变量 --}} @php $current_balance = $loan->amount; // 初始剩余余额为贷款总额 $weekly_rate = (double)$weekly_interest->interest / 100; // 周利率 $period_total_payment = (double)$total / (double)$terms->weeks; // 每期固定还款总额 @endphp @for($i = 0; $i < $terms->weeks; $i++) @php $period_interest = $current_balance * $weekly_rate; // 当期利息=当期剩余本金*周利率 $period_principal = $period_total_payment - $period_interest; // 当期归还本金 // 更新剩余余额 $current_balance -= $period_principal; // 最后一期抹平四舍五入导致的余额误差 if ($i == $terms->weeks - 1) { $period_principal += $current_balance; $current_balance = 0; } @endphp <tr> <th>{{ $i + 1 }}</th> <th> PHP {{ number_format($period_principal, 2) }} </th> <th> PHP {{ number_format($period_interest, 2) }} </th> <th> PHP {{ number_format($period_total_payment, 2) }} </th> <th> PHP {{ number_format(max($current_balance, 0), 2) }} </th> </tr> @endfor
2. 补充Livewire传递参数
原代码没有将$loan变量传递到视图,需要在返回视图时补充:
public function render() { $loan = Loan::whereId($this->loan->id)->first(); $terms = Terms::whereTerms($loan->terms)->first(); $interest = (double)$loan->amount * ((double)$loan->interest / 100); $total = (double)$loan->amount + (double)$interest; $weekly_interest = Interest::whereDuration('weekly')->first(); return view('livewire.admin.schedule.table-schedule-component', compact('loan', 'interest', 'total', 'terms', 'weekly_interest')); }
内容的提问来源于stack exchange,提问作者Isaac Arcilla
相关产品推荐
相关产品推荐

