繁体   English   中英

Laravel刀片检查空foreach

[英]Laravel blade check empty foreach

我想检查我的foreach是否为空,以便基本的html标记不显示且内部没有结果。 我正在尝试将其包装在if语句中,然后如果它为空,则不要循环其他foreach。

@if ($status->replies === '')

@elseif
<div class="media-body reply-body">
    @foreach ($status->replies as $reply)
        <p>{{ $reply->body }}</p>
    @endforeach
</div>
@endif

@if (!(empty($status->replies))
<div class="media-body reply-body">
    @foreach ($status->replies as $reply)
        <div class="media">
            <a class="pull-left" href="{{ route('profile.index', ['username' => $reply->user->username]) }}">
                <img class="media-object" alt="{{ $reply->user->getNameOrUsername() }}" src="{{ $reply->user->getAvatarUrl() }}">
            </a>
            <div class="media-body">
                <h5 class="media-heading"><a href="{{ route('profile.index', ['username' => $reply->user->username]) }}">{{ $reply->user->getNameOrUsername() }}</a></h5>
                <p>{{ $reply->body }}</p>
                <ul class="list-inline list-replies">
                    <li>
                        <a href="{{ route('status.like', ['statusId' => $reply->id]) }}"><i class="fa fa-thumbs-up"></i></a>
                    {{ $reply->likes->count() }} {{ str_plural('like', $reply->likes->count()) }}</li>
                    <li>{{ $reply->created_at->diffForHumans() }}</li>
                </ul>
            </div>
            <hr>
        </div>
    @endforeach
</div>
@endif

检查文档以获得最佳结果:

@forelse($status->replies as $reply)
    <p>{{ $reply->body }}</p>
@empty
    <p>No replies</p>
@endforelse

我认为您正在尝试检查数组是否为空。您可以这样做:

@if(!$result->isEmpty())
     // $result is not empty
@else
    // $result is empty
@endif

引用 isEmpty()

它是一个数组,所以==== ''不起作用(===表示它必须为空字符串。)

使用count()标识数组中是否包含任何元素(count返回一个数字,如果大于等于1,则结果为true,0 = false。)

@if (count($status->replies) > 0)
 // your HTML + foreach loop
@endif

如果存在则回显数据

有时您可能希望回显一个变量,但是不确定是否已设置该变量。 我们可以这样用冗长的PHP代码来表示:

 {{ isset($name) ? $name : 'Default' }} 

但是,刀片式服务器提供了以下便捷的捷径,而不是编写三元语句:

 {{ $name or 'Default' }} 

在此示例中,如果$ name变量存在,将显示其值。 但是,如果不存在,则会显示默认值。

来自https://laravel.com/docs/5.4/blade#displaying-data

您应该使用empty()

@if (!empty($status->replies)) 

<div class="media-body reply-body">
    @foreach ($status->replies as $reply)
        <p>{{ $reply->body }}</p>
    @endforeach
</div>

@endif

您可以使用count,但是如果数组较大,则需要更长的时间,如果您只需要知道它是否为空,则使用空是更好的选择。

如果我很了解这个问题,这是我最好的解决方案:

使用$object->first()方法在if语句内(即在第一个循环上$object->first()运行一次代码。 $object->last()也适用相同的概念。

    @if($object->first())
        <div class="panel user-list">
          <table id="myCustomTable" class="table table-hover">
              <thead>
                  <tr>
                     <th class="col-email">Email</th>
                  </tr>
              </thead>
              <tbody>
    @endif

    @foreach ($object as $data)
        <tr class="gradeX">
           <td class="col-name"><strong>{{ $data->email }}</strong></td>
        </tr>
    @endforeach

    @if($object->last())
                </tbody>
            </table>
        </div>
    @endif

使用以下代码,可以首先使用laravel指令的@isset检查变量是否已设置,然后使用@unless的laravel指令检查数组是否为空或不

@if(@isset($names))
    @unless($names)
        Array has no value
    @else
        Array has value

        @foreach($names as $name)
            {{$name}}
        @endforeach

    @endunless
@else
    Not defined
@endif

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM