【问题标题】:Laravel running totals or balance with paginateLaravel 运行总计或平衡分页
【发布时间】:2019-02-12 04:12:51
【问题描述】:

我对 laravel 很陌生,对编码也很陌生。我很惊讶运行总计或余额没有受到太多关注。

问题是:

  • 我有一个帐户的当前余额记录在数据库中。
  • 我有一个名为 account/$id 的页面,我可以在其中获取具有该 ID 的帐户的所有交易。
  • 我的最后一列是该交易后帐户 ID 的余额。一个反向运行的总计,我认为它被称为。示例:交易 3 的余额 = 交易 2 的余额 - 交易 2 的金额。
  • 直到这里一切正常。
  • 但是,当我进入分页时;只有第一页给了我正确的平衡。在第二秒,天平从头开始。

有效的代码:

控制器

$transactions=\App\Transaction::orderByDesc('transaction_date')->orderByDesc('created_at')->where('account_id',$id)->get();
    $previousTransaction=0;
    $previousBalance=$account->account_current_balance;

    foreach ($transactions as $key => $transaction) {
        $balances[]=$previousBalance-$previousTransaction;
        $previousBalance=array_values($balances)[++$key-1];
        $previousTransaction = $transaction->transaction_ammount;
    }

查看

@foreach($transactions as $key => $transaction)
  <td class="align">{{array_values($balances)[++$key-1]}}</td>
@endforeach

没有给我正确平衡的代码:

控制器

$transactions=\App\Transaction::orderByDesc('transaction_date')->orderByDesc('created_at')->where('account_id',$id)->paginate(20);
    $previousTransaction=0;
    $previousBalance=$account->account_current_balance;

    foreach ($transactions as $key => $transaction) {
        $balances[]=$previousBalance-$previousTransaction;
        $previousBalance=array_values($balances)[++$key-1];
        $previousTransaction = $transaction->transaction_ammount;
    }

查看

@foreach($transactions as $key => $transaction)
  <td class="align">{{array_values($balances)[++$key-1]}}</td>
@endforeach
<div class="content-header noevents">
    {{ $transactions->links() }}
</div>

我在links()中也尝试过不同的appends,但是好像不知道怎么用或者不起作用。

非常感谢任何可以帮助我的人。

【问题讨论】:

    标签: laravel pagination append balance


    【解决方案1】:

    问题:
    每次浏览分页链接时,实际上都会向同一个 URL 发送一个 get 请求,加上 ?page=N (N: link number) 例如 https://example.com/account/36?page=2.
    并且每次控制器应该执行,并且在开始时,它设置

        $previousTransaction=0;
        $previousBalance=$account->account_current_balance;
    

    解决方案:
    我没有你的完整代码,但你的控制器应该是这样的:

        public function ControllerFunction(Request $request){
    
            $transactions=\App\Transaction::orderByDesc('transaction_date')->orderByDesc('created_at')->where('account_id',$id)->paginate(20);
    
            if(!$request->has(['pre_trans', 'pre_balance']){
                $previousTransaction=0;
                $previousBalance=$account->account_current_balance;
            }else{
                $previousTransaction = $request['pre_trans'];
                $previousBalance = $request['pre_balance'];
            }
    
            foreach($transactions as $key => $transaction) {
                $balances[]=$previousBalance-$previousTransaction;
                $previousBalance=array_values($balances)[++$key-1];
                $previousTransaction = $transaction->transaction_ammount;
            }
    
            if(!$request->has(['pre_trans', 'pre_balance']){
                $request->request->add(['pre_trans' => $previousTransaction]);
                $request->request->add(['pre_balance' => $previousBalance]);
            }else{
                $request['pre_trans'] = $previousTransaction;
                $request['pre_balance'] = $previousBalance;
            }
        }
    

    【讨论】:

    • 感谢您的回答。但是我有 2 个问题: 1.- 将静态添加到 $previousBalance=$account->account_current_balance 时出现错误“常量表达式包含无效操作”,我刚刚读到您不能使用变量启动静态变量。 2.- 无论有无静态,我都有相同的结果。我已将 $account->account_current_balance 更改为常量,在 $previousTransaction 和 $previousBalance 中添加了静态,并且在分页时余额会重新启动。
    • 抱歉问题#1,我没有注意到。我看到这个link 并发现因为 evetime 它执行控制器静态变量重置并获取新值。所以我认为你应该使用 session(request)。我会更新答案希望它对你有帮助。
    • 感谢您的努力!今晚晚些时候我会去看看,然后告诉你,
    猜你喜欢
    • 2017-12-01
    • 2018-04-20
    • 1970-01-01
    • 2020-12-23
    • 2016-07-18
    • 2016-08-04
    • 2021-10-01
    • 2018-07-18
    • 2021-12-09
    相关资源
    最近更新 更多