Laravel - 如何在刀片视图中计算数组中对象的总和

时间:2018-01-18 15:40:01

标签: php laravel

我在刀片视图中有一个foreach循环,我在其中列出了具有枢轴属性价格的对象:

                @foreach($transaction->options as $option)
                  <div class="row">
                    <div class="col-md-6">
                      <p>Option description: {{ $option->description }}</p>
                      <p>Price: {{ $option->pivot->price }}</p>
                    </div>
                  </div>
                  <hr>
                @endforeach
                <div class="row">
                  <div class="col-md-6">
                    <h4>Options total: </h4>
                  </div>
                </div>

我想,因为我在这里做一个foreach循环,计算所有选项的总和,以便我可以在Options total:旁边写它

我试过这个:

               @foreach($transaction->options as $option)
                  <div class="row">
                    <div class="col-md-6">
                      <p>Option description: {{ $option->description }}</p>
                      <p>Price: {{ $option->pivot->price }}</p>
                      @php($total += $option->pivot->price)
                    </div>
                  </div>
                  <hr>
                @endforeach
                <div class="row">
                  <div class="col-md-6">
                    <h4>Options total: {{ $total }}</h4>
                  </div>
                </div>

但是,这没有用,我收到了一个错误:

  

未定义变量:总计

我该怎么做?

4 个答案:

答案 0 :(得分:9)

首先定义变量:

@php($total = 0);

您还可以使用以下内容获取枢轴列的总和:

$transaction->options()->sum('price')

答案 1 :(得分:1)

您只需在刀片模板中进行计算即可。这对其他用户可能会有帮助。只需在刀片语法{{}}中进行计算,然后使用display:none;即可。 CSS属性。例如

<div style="display: none">
	{{ $total = 0 }}
</div>
@foreach($report as $device)
    <tr>
        <td>{{$device->id}}</td>
        <td>{{$device->price}}</td>
        <div style="display: none">{{$total += $device->price}}</div>
    </tr>
@endforeach
<tr>
    <th>Total Distance Travelled</th>
    <th>{{$total}}</th>
</tr>

答案 2 :(得分:1)

Blade有一个@php指令,可以在模板中执行一个纯PHP块。请注意,这可能是不良设计的迹象,因此应避免在模板中放置太多逻辑。即:

@php
    $total = 0;
@endphp

@foreach ($items as $item)
<tr>
    <td>{{ $item->name }}</td>
    <td>{{ $item->code }}</td>
    <td>{{ $item->price }}</td>
</tr>

@php
    $total += $item->price;
@endphp

@endforeach

....

<p>Total {{ $total }}</p>

答案 3 :(得分:0)

您可以轻松地说出

{{$$ action-> options()-> sum('price')}}