如何使用Laravel刀片模板检查循环中是否存在匹配项

时间:2016-04-15 21:38:18

标签: php laravel laravel-5 laravel-blade

我有以下情况:

  @foreach ($driver->delivery as $delivery)<!--loop over all deliveries -->                                                
     @if ($delivery->delivery_date==$whole_week["mon"])
        {{$delivery->city}} , {{$delivery->state}}                        
     @endif
  @endforeach

它会循环所有交付,如果交付是星期一的匹配日,那么我会显示城市和州。

如果循环没有匹配,是否有blade方式显示消息no delivery?或者我需要介绍$successful_match变量,我将bool存储成功匹配? (下面的工作示例)

<?php $sunDelivery=false; ?>
  @foreach ($driver->delivery as $delivery)<!--loop over all deliveries -->                                                
     @if ($delivery->delivery_date==$whole_week["sun"])
         {{$delivery->city}} , {{$delivery->state}}  
         <? $sunDelivery=true; ?>
    @endif                        
  @endforeach   
{{$sunDelivery ? '' : 'no delivery'}}

1 个答案:

答案 0 :(得分:0)

没有合适的语法来做到这一点。不鼓励在视图中这样做。

最正确的方法是预处理数据并将变量True / False发送到视图。

否则,您可以extend Blade添加新命令或使用this one等扩展程序包。

肮脏的技巧1:

$sunValue传递为false,以便以这种方式查看和设置:

@foreach( $driver->delivery as $delivery )
    @if( ($sunDelivery) ? $delivery->delivery_date==$whole_week["sun"] : $sunDelivery=$delivery->delivery_date==$whole_week["sun"] )
    (...)

通过这种方式,如果$sunValue为False(默认值),则$sunValue在评估之前设置为True / False条件,否则仅评估条件。

恕我直言,这个肮脏的伎俩比跟随更干净。

肮脏的技巧2:

使用评论/取消注释:

{{--*/ $sunDelivery = False /*--}}
@foreach( $driver->delivery as $delivery )
    @if( $delivery->delivery_date==$whole_week["sun"] )
        {{--*/ $sunDelivery = True /*--}}
        (...)

此方法有效,因为Blade注释在<?php /*...*/ ?>中转换,因此上面的语法变为<?php /**/ command /**/ ?>

注意:两个代码都经过测试可用。