Laravel叶片检查为空

voj3qocg  于 2023-03-09  发布在  其他
关注(0)|答案(8)|浏览(115)

我想检查一下foreach是否为空,这样基本的html标记就不会显示出来,里面也没有结果。我试着把它 Package 在一个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
mwg9r5ms

mwg9r5ms1#

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

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

tktrz96b2#

我想你是在检查数组是否为空,你可以这样做:

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

引用为空()

9rnv2umw

9rnv2umw3#

您应该使用empty()

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

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

@endif

你可以使用count,但是如果数组更大,它需要更长的时间,如果你只需要知道它是否为空,那么使用empty是更好的。

58wvjzkj

58wvjzkj4#

它是一个数组,所以==== ''不起作用(===意味着它必须是一个空字符串)。
使用count()来标识数组是否包含任何元素(count返回一个数字,1或更大的值将计算为true,0 = false。)

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

polkgigr5#

如果数据存在则回显数据

有时候你可能想回显一个变量,但是你不确定这个变量是否已经被设置了。我们可以用冗长的PHP代码来表达这一点:

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

但是,Blade为您提供了以下方便的快捷方式,而不是编写三元语句:

{{ $name or 'Default' }}

在此示例中,如果$name变量存在,则将显示其值。但是,如果不存在,则将显示单词Default。
来自https://laravel.com/docs/5.4/blade#displaying-data

ikfrs5lh

ikfrs5lh6#

如果我很好地理解了这个问题,这是我的最佳解决方案:
使用$object->first()方法运行if语句中的代码一次,即在第一次循环时。对于$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
pvabu6sv

pvabu6sv7#

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

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

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

    @endunless
@else
    Not defined
@endif
aurhwmvo

aurhwmvo8#

Laravel 9以上最现代、最简单和最短的解决方案是@empty标签:

@empty($data)
    {{ $data }} is empty.
@else
    // Your HTML + foreach for $data
    {{ $data }} is NOT empty.
@endempty

相关问题