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
最良の結果を得るには、 documentation を確認してください。
@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
存在する場合のデータのエコー
変数をエコーしたい場合もありますが、変数が設定されているかどうかはわかりません。これを次のような冗長PHPコードで表現できます。
{{ isset($name) ? $name : 'Default' }}
ただし、Bladeでは、3項のステートメントを記述する代わりに、次の便利なショートカットが提供されます。
{{ $name or 'Default' }}
この例では、$ name変数が存在する場合、その値が表示されます。ただし、存在しない場合は、Wordのデフォルトが表示されます。
これは配列なので、==== ''
は機能しません(===は空の文字列でなければならないことを意味します)。
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
Countを使用できますが、配列が大きい場合は時間がかかります。空であるかどうかだけを知る必要がある場合は、emptyを使用するのが適切です。
次のコードを使用すると、最初に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
質問をよく理解していれば、これが私の最善の解決策です。
$object->first()
メソッドを使用してif
ステートメント内のコードを1回、つまり最初のループで実行します。 $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