Лезвие лезвия

Я хочу проверить, свободен ли мой 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' }} 

Однако вместо написания тройного заявления Blade предоставляет вам следующее удобное сокращение:

 {{ $name or 'Default' }} 

В этом примере, если существует переменная $ name, ее значение будет отображаться. Однако, если он не существует, будет отображаться слово Default.

Из 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, но если массив больше, он занимает больше времени, если вам нужно только знать, является ли его пустым, пустым, более удобным.