首页 > 解决方案 > 当我想以 desc 顺序显示记录时如何计算余额?

问题描述

我想在顶部显示最近创建的金额,但我也想显示余额列,余额列将从记录中添加或减去金额

控制器

$ledgerTransactions = LedgerRecord::where('ledger_id', $id)->orderBy('created_at', 'asc')->get();

@php
  $balance = 0;
  $ledgerTransactions = $ledgerTransactions->map(function($transaction) use(&$balance) {
    $transaction->total = $transaction->sum('amount');
    if ($transaction->type == "Payment") {
      $transaction->total *= -1;
    }
    $transaction->balance = ($balance += $transaction->total);
    return $transaction;
  })->reverse();
@endphp

@foreach($ledgerTransactions as $transaction)
    <tr>
        <td>
            <p class="mb-0">{{ $transaction->created_at->format('M d, Y') }}</p>
        </td>
        <td class="font-weight-bold">{{ $transaction->type }}</td>
        <td>{{ $transaction->description ?? '' }}</td>
        <td>
            ${{ $transaction->amount }}
        </td>
        <td>
            ${{ $transaction->balance }}
        </td>
    </tr>
@endforeach

问题是它从顶部开始添加,这是我不想要的。我希望它从底部开始添加

预期结果在下图中以红色标记

在此处输入图像描述

标签: phplaraveleloquent

解决方案


这可能就像这样简单:

@php
  $balance = 0;
  $ledgerTransactions = $ledgerTransactions->map(function($transaction) use(&$balance) {
    $transaction->total = $transaction->amount;
    if ($transaction->type == "Payment") {
      $transaction->total *= -1;
    }
    $transaction->balance = ($balance += $transaction->total);
    return $transaction;
  })->reverse();
@endphp

@foreach($ledgerTransactions as $transaction)
    <tr>
        <td>
            <p class="mb-0">{{ $transaction->created_at->format('M d, Y') }}</p>
        </td>
        <td class="font-weight-bold">{{ $transaction->type }}</td>
        <td>{{ $transaction->description ?? '' }}</td>
        <td>
            ${{ $transaction->amount }}
        </td>
        <td>
            ${{ $transaction->balance }}
        </td>
    </tr>
@endforeach

推荐阅读