You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 18:57:03