如何使用Laravel刀片模板检查循环中是否没有匹配


How to check for no matches in the loop using Laravel blade template

我有以下场景:

  @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'}}

没有合适的语法可以做到这一点。不鼓励在观点上做这件事。

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

否则,您可以添加一个新命令或使用像这样的扩展包来扩展Blade。

肮脏的把戏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条件,否则仅对条件求值。

IMHO,这个肮脏的把戏比下面更干净。

肮脏的把戏2:

使用注释/取消注释:

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

这种方法之所以有效,是因为Blade注释是在<?php /*...*/ ?>中转换的,所以上面的语法变成了<?php /**/ command /**/ ?>


注意:这两个代码都是在工作时测试的。