【问题标题】:if and else condition not working in laravel for the array of dataif 和 else 条件在 laravel 中不适用于数据数组
【发布时间】:2020-05-22 01:49:12
【问题描述】:

其他情况,抱歉,当购物车为空时,您的购物车中没有商品不打印

@if($datas)
   @foreach($datas as $data)
   <h5>This is product</h5>
    @endforeach
@else
        <h5>Sorry no items in your cart</h5>    // Not printing when cart is empty  
@endif

【问题讨论】:

  • 我猜你在datas 中收到了一组对象,对吧?你试过count吗?你能在if语句之前var_dumpdatas的初始条目吗

标签: php laravel laravel-blade


【解决方案1】:

这可能是您将$datas 作为一个空集合。

如果您从 Eloquent 模型中获得$datas 中的集合,那么您可以使用isNotEmpty 进行检查,如下所示

@if($datas->isNotEmpty())
    @foreach($datas as $data)
        <h5>This is product</h5>
    @endforeach
@else
    // $data is empty
@endif

更多信息请参见documentation

或者您可以通过empty() (用于数组)方法简单地检查它,如下所示

@if(!empty($datas))
    @foreach($datas as $data)
        <h5>This is product</h5>
    @endforeach
@else
    // $data is empty
@endif

【讨论】:

    【解决方案2】:

    如果它的 array 数据然后使用 empty()

    @if(!empty($datas))
    @else
    @endif
    

    或其他方式使用 count()

    @if(count($datas) > 0)
    @else
    @endif
    

    或者如果它的 collection 则使用 isEmpty()

    @if(!$datas->isEmpty())
    @else
    @endif
    

    【讨论】:

      【解决方案3】:

      使用 empty() 函数检查数组是否为空

      @if(!empty($datas))
          @foreach($datas as $data)
              <h5>This is product</h5>
          @endforeach
      @else
          //do 
      @endif
      

      【讨论】:

        【解决方案4】:

        我几乎可以看到答案。但是让我再解释一下。我可以看到您正在检查 $datas 是否为空。如果您使用辅助函数dd() 转储$datas 值,您可以看到它总是从Illuminate\Support\Collection 返回一个集合。所以即使$datas 是空的,它也会给出一个空集合。您可以在控制器中自行测试,如下所示

        if($datas) {
           dd($datas);
        }else{
           dd('empty');
        }
        

        这将始终显示空集合。因此,仅使用 if 条件您无法检查集合是否为空。您可以使用以下方法检查集合,而不是 if

        1. collect([])-&gt;isEmpty();

          @if ($datas->isEmpty())
          
          @endif
          
        2. collect([])-&gt;isNotEmpty();

          @if ($datas->isNotEmpty())
          
          @endif
          
        3. collect([])-&gt;first();

          @if ($datas->first())
          
          @endif
          
        4. collect([])-&gt;count();

          @if ($datas->count())
          
          @endif
          

        如果你查看 Laravel Collection 文档,你可以找到更多。

        Collections full documentation

        Location above methods available

        编辑 01 这个答案直接回答了你的问题。请检查

        Eloquent Collection: Counting and Detect Empty

        【讨论】:

          【解决方案5】:

          你可以使用 laravel 的 forelse 循环 - https://laravel.com/docs/6.x/blade#loops

          @forelse ($datas as $data)
              <h5>This is product</h5>
          @empty
              <h5>Sorry no items in your cart</h5>
          @endforelse
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-06-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-10-05
            • 1970-01-01
            • 2013-04-26
            • 2021-09-25
            相关资源
            最近更新 更多