Ответ 1
Проверьте документацию для лучшего результата:
@forelse($status->replies as $reply)
<p>{{ $reply->body }}</p>
@empty
<p>No replies</p>
@endforelse
Я хочу проверить, пуст ли мой 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()
Эховые данные, если оно существует
Иногда вам может потребоваться повторить переменную, но вы не уверены, была ли установлена переменная. Мы можем выразить это в подробном PHP-коде, например:
{{ isset($name) ? $name : 'Default' }}
Однако вместо написания тройного утверждения Blade предоставляет вам следующее удобное сокращение:
{{ $name or 'Default' }}
В этом примере, если существует переменная $name, ее значение будет отображаться. Однако, если он не существует, будет отображаться слово Default.
Это массив, поэтому ==== ''
не будет работать (value === означает, что оно должно быть пустой строкой.)
Используйте count(), чтобы идентифицировать массив, имеет какие-либо элементы (count возвращает число, 1 или более, будет оцениваться как true, 0 = false.)
@if (count($status->replies) > 0)
// your HTML + foreach loop
@endif
Вы должны использовать empty()
@if (!empty($status->replies))
<div class="media-body reply-body">
@foreach ($status->replies as $reply)
<p>{{ $reply->body }}</p>
@endforeach
</div>
@endif
Вы можете использовать счетчик, но если массив больше, он занимает больше времени, если вам нужно только знать, является ли его пустым, пустым более удобным.
Это мое лучшее решение, если я хорошо понял вопрос:
Использование метода $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
Используя следующий код, можно сначала проверить, установлена ли переменная или нет, используя @isset директивы laravel, а затем проверить, что массив пуст или не использует @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