Я хочу проверить, свободен ли мой 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.
Вы должны использовать empty ()
@if (!empty($status->replies)) <div class="media-body reply-body"> @foreach ($status->replies as $reply) <p>{{ $reply->body }}</p> @endforeach </div> @endif
Вы можете использовать count, но если массив больше, он занимает больше времени, если вам нужно только знать, является ли его пустым, пустым, более удобным.