如何使用 Laravel blade 模板检查循环中没有匹配项

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发送到视图。

否则,您可以extend Blade adding a new command or using an extension package like this one

恶作剧一:

$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:

使用Comment/Uncomment:

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

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


注意:两个代码均经测试有效。