如何在Laravel的所有页面上汇总价格?

时间:2018-07-28 00:59:01

标签: laravel laravel-5 foreach pagination laravel-5.6

我的查询如下:

$orders = DB::table('orders')->paginate(10);

我的视图刀片是这样的:

@php($total = 0)
@foreach ($orders as $order)
    <tr>
        <td>{{ $order->number }}</td>
        <td>{{ $order->price }}</td>
        ....
    </tr>
    @php($total += $order->price)
@endforeach
...
Total : {!! $total !!}
{{ $orders->links() }}

从脚本中,我仅能在一页中获得总价

如何在所有页面上获得总价?

2 个答案:

答案 0 :(得分:0)

Laravel视图作曲家: https://laravel.com/docs/5.6/views#view-composers

基本上,创建一个提供程序或放入AppServiceProvider中。

public function boot() {
    \View::composer('*', function($view) {
        $view->with('sumOrderPrice', \DB::table('orders')->sum('price'));
    });
}

\View::share('sumOrderPrice', \DB::table('orders')->sum('price'));

答案 1 :(得分:0)

我真的建议您不要破坏MVC模式,所有逻辑都必须在控制器中完成,让它本身由控制器或服务来完成,但是在将所有数据传递给视图之前要准备好所有数据,因此请准备一个$ sum变量在控制器中执行foreach,如果不想这样做,至少不要在视图中编写逻辑,并在集合实例上使用方法“ sum”,请查看https://laravel.com/docs/5.6/collections#method-sum,因此您的代码将变为:

//in your controller
$orders = DB::table('orders')->paginate(10);


//in your view
@foreach ($orders as $order)
    <tr>
        <td>{{ $order->number }}</td>
        <td>{{ $order->price }}</td>
        ....
    </tr>
@endforeach
...
Total : {{ $orders->getCollection()->sum('price') }}
{{ $orders->links() }}