我的查询如下:
$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() }}
从脚本中,我仅能在一页中获得总价
如何在所有页面上获得总价?
答案 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() }}